Tips – CDN – アイコン・ダミー画像など

アイコン

Font Awesome

概要

Font Awesomeのアイコンを利用するための手順。

  1. メールアドレスでアカウントを取得する
  2. アイコンを利用するためのキット番号を取得
    • アカウント取得後は”Manage Kitのリンク先で確認できる
  3. アイコンを使うページのheadセクションに、Font AwesomeのJSを読み込むスクリプトを書く
  4. Font Awesomeのページで使いたいアイコンのタグ表現をコピーする
  5.  アイコンを利用する場所にコピーしたタグを張り付ける
  6. 必要なら、タグのスタイルを設定するクラスやマウスオーバー時のタイトルなどを指定する

JSの記述

まずhead部に以下のスクリプトを記述する。

タグの記述

アイコンを表示する場所にアイコンを表示するタグを記述。Font Awesomeのサイトでコピーできる。

スタイル設定

サイズや色などのスタイルをクラスで設定する場合、Font Awesome自体がclassで設定されているので以下の様になる。

HTML

CSS

タイトル設定

マウスオーバーで文字列を表示させる場合、以下の様にtitle属性を追加する。

ダミー画像

Dynamic Dummy Image Generatorは自由なサイズと色の画像ファイルをリアルタイムで取り込める。

  1. サイトで画像のサイズ、背景色、前景色、ファイルタイプを指定すると、それを織り込んだURLが表示される
  2. そのURLをimgタグで指定すると、ページレンダリング時に必要なファイルがダウンロードされて表示される

以下は指定の例で、サイトに表示されたURLをそのままコピー&ペーストしたもの。

また、表示させるテキストも自由に設定できる。

Rails – 画像ファイルの配置とパス指定

概要

Railsで画像ファイルを配置するのは以下の2箇所

app/assets/images
開発側で準備するロゴやアイコンなど
public
ユーザーのアップロード画像など

それぞれの下にディレクトリーを作って、その中の画像ファイルをimg要素、div要素の背景画像で読み込む場合のパス指定について整理した。

ビューファイル&img要素の場合

app/assets/images

サブディレクトリ―exampleの下にimage_assets.jpgを置いた場合。

example/ファイル 読み込めない
/example/ファイル 読み込めない
./example/ファイル 読み込めない

public

サブディレクトリ―exampleの下にimage_public.jpgを置いた場合。

example/ファイル 読み込める
/example/ファイル 読み込める
./example/ファイル 読み込める

ビューファイル&img_tagの場合

app/assets/images

サブディレクトリ―exampleの下にimage_assets.jpgを置いた場合。

example/ファイル 読み込める
/example/ファイル 読み込めない
./example/ファイル NoMethodError

public

サブディレクトリ―exampleの下にimage_public.jpgを置いた場合。

example/ファイル Sprockets::Rails::Helper::AssetNotFound
/example/ファイル 読み込める
./example/ファイル NoMethodError

SCSS&div要素の背景画像の場合

app/assets/images

サブディレクトリ―exampleの下にimage_assets.jpgを置いた場合。

example/ファイル 読み込める
/example/ファイル 読み込めない
./example/ファイル 読み込めない

public

サブディレクトリ―exampleの下にimage_public.jpgを置いた場合。

example/ファイル 読み込めない
/example/ファイル 読み込める
./example/ファイル 読み込めない

まとめ

img要素はpublicの画像は読めるがassetsの画像は読めないので、img_tagヘルパーを使う方がよい。画像をimg_tagで配置する場合も、div要素の背景画像とする場合も、ファイルのパス指定は以下の通り。

パス指定
app/assets/images サブディレクトリ―/ファイル
public /サブディレクトリ―/ファイル

参考

確認に使ったアプリケーションファイル

pages_controller.rb

image_location.html.erb

pages.scss

 

Tips – ヘッダーメニュー

概要

HTMLのheader要素内に固定メニューを配置する。左端にロゴ画像を置き、メニューは右寄せで配置する例。

HTML/CSS

HTML

ヘッダーにdiv要素によるロゴ画像とulによるメニューを配置し、スタイルはCSSで設定する。

CSS

header内のロゴとメニューブロックをFlex-boxで配置し、左右に寄せている。メニューリストの水平配置にもFlex-boxを使っている。

なおheaderを固定してbodyのみをスクロールさせることもできる。

  • 最初のブロックでスタイルをリセット。
  • header要素
    • display: flex指定でコンテンツ(ロゴ、メニューブロック)をフロートさせて配置
    • justify-contentで2つのコンテンツを左端と右端に寄せる
    • 高さを指定
  • .header_logo
    • div要素に背景画像を指定
  • .header_menu
  • .header_menu li
    • 最初の3行はリストの中の文字を縦横センタリングする設定
  • .header_menu li + li

ロゴのサイズについて

  • div要素で背景画像のみを表示させるときはwidth/heightを明示的に設定しなければならない
  • 当初はheight: 100%headerの高さに合わせ、width: autoで表示されていた
  • ところがそこで親のheaderdisplay: flexを設定すると表示が消えてしまった
  • そこでここでは、グローバルなカスタムプロパティーを使っている

Rails/SCSS

HTML

  • 通常すべてのレンダリング時に使われる共通レイアウト
    • app/views/layouts/application.html.erb
  • これとは別にヘッダーメニューが必要な場合の共通レイアウトファイルを作成
    • app/views/layouts/application_with_header.html.erb

ヘッダーメニューが必要なアクションのみこのレイアウトを使うため、コントローラーでレイアウトファイルを指定。

レイアウトファイルが読み込むスタイルシートは標準と同じapplication.css

requireされるlayout.scssで、ヘッダーメニュー用のSCSSを読み込む(ヘッダーメニューがない場合も読み込む)。

SCSS

以下のSCSSファイルを作成して読み込ませる。リセットCSSは別に読み込んでいる。

 

Tips – フォームのデザイン

概要

  • テキストフィールドや送信ボタンなどを含むフォームのデザインについて
  • input要素などのコンテンツから組み上げる方法と、flex-boxを使った方法の2つ。
  • フォーム全体のページ内の位置設定についても含めた

共通事項

元になるHTML

3つのinput要素と1つのbutton要素を含むform要素。form_blockというクラスのdiv要素でラップする。

Railsのhtml.erbの場合は以下の様になる。

 

リセットCSS

CSSでは以下で関係要素のスタイルをリセットする。

Railsの場合は別にreset.cssを準備する(Eric Meyer’s “Reset CSS” 2.0)。

body要素

body要素は背景色だけを設定する。

方法1~要素スタイルの積み上げ

CSS

CSSの内容

CSSの全体は以下のとおり。以下、手順を分解して整理する。

div要素によるラップ

  • div要素で表題(h1)とform要素全体をラップする
  • 幅は400pxに設定
  • 高さ指定をしない(auto)なので、子要素に応じて全体の高さが変わる

表題

  • フォームの表題をh1要素で書いている

form要素

  • form要素のパディングと背景色を設定
  • 幅は親要素のdivにフィットし、高さは子要素群に合わせて変わる

input要素

  • インラインレベル要素のinputをブロックレベル要素に変更
  • box-sizingborder-boxに指定
    • これを指定しないとinput要素がはみ出てしまう
  • 幅(width)は親要素に合わせる
  • 高さは32px固定
  • マージン(下)を設定して間隔をあける

button要素

  • インラインレベル要素のbbuttonをブロックレベル要素に変更
  • 幅は親要素formの50%
  • margin-left: autoで右寄せ
    • 中央に置く場合はmargin-right: autoも加える

フォームの位置調整

  • もう一度全体をラップしているdiv要素に戻り、bodyに対する位置を指定する
    • フォームの左上隅が上端から20%、左端から40%

SCSS

RailsなどでSCSSを使う場合の例。

 

方法2~flex-box

CSS

CSSの内容

flex-boxを使ったCSSの全体は以下のとおり。フォーム全体の位置設定は方法1と同じ。

div要素によるラップ

  • 幅は400px
  • 高さはautoとし、子要素のformの髙さに合わせる

form要素

方法1と違うのは以下の点。

  • display: flexで子要素へのflex適用を指定
  • flex-direction: columnで子要素を縦並びに
  • justify-content: space-aroundで子要素を均等に配置
  • 高さを200pxに固定

input要素

要素の間隔は自動的に決まるので、方法1で設定していたmragin-bottomを削除している。

button要素

  • button要素もマージンを削除している
  • 右寄せにするため、align-self: flex-endを設定
    • 中央に置く場合はcenterを指定

SCSS

RailsなどでSCSSを使う場合の例。

 

Tips – リストを横並びに

概要

デフォルトのHTML/CSSでは、リスト内の各要素(li)は縦に並べられ、各要素の先頭にマーカーが付される。

このスタイルを変更し、li要素を横に並べるスタイルを設定する。

HTML/CSS

HTML

以下のリストでulタグにクラスを指定し、スタイルを設定する。

CSS

CSSの例は以下のとおり。

冒頭のブロックは関係する要素のリセットCSS。

ulタグに設定したmenuクラスのスタイル

  • list-style-type: noneでリストのマーカー表示を抑止
  • display: flexは、この指定1つで子要素のボックス要素が横並びになる

menuクラスの下のli要素のスタイル

  • 親のulflexを指定しているので、個別要素としてのスタイルを設定
  • liを等幅に設定し、背景色を指定している

Rails/SCSS

HTML

HTMLの内容は同じ。

SCSS

リセットCSSはreset.cssファイルとして切り分けている。

考え方はCSSと変わらず、子要素liをブロック内に入れ子にしている。

 

Tips – アンカーをボタン風に

概要

アンカー要素(a)にスタイルを適用して、ボタンの様な形にする。

HTML/CSS

HTML

HTMLではa要素をdivタグで囲んでクラス定義している。

CSS

CSSの例は以下のとおり。

前段のブロックで関係要素のスタイルをリセットし、bodyの背景色をセットしている。

アンカーのスタイル設定については以下のとおり。

.button_like_anchorクラスの中のa要素のスタイル

  • marginpaddingの設定のためにdisplay: inline-blockを指定
  • box-sizingの設定はここでは影響しないが、サイズ指定してボタンを並べるときなどに関係
  • border-radiusで角を丸くしている
  • text-decoration: nonecolor設定でデフォルトのアンカーの装飾を変更

Hover時の変化

  • 元の背景をbackground-colorで設定
  • 疑似クラスhoverでカーソルが領域に入った時のスタイルを設定
    • 背景色を少し明るくしている
    • cursorでカーソル形状を変更(デフォルトがpointerのため、ここでは影響しない)

Rails/SCSS

html.erb

Railsではアンカータグをヘルパーで実装している。

SCSS

リセットCSSはreset.cssファイルとして切り分けている。

また、疑似クラスhoverの記述をSCSSに合わせて変更している。

 

CSS – リセットCSS

概要

ブラウザーによってデフォルトで設定されているスタイルをリセットしてシンプルにするためのCSS。

リセットに加えて単純のスタイルを設定するものもある。

各種リセットCSS

Eric Meyer’s “Reset CSS” 2.0

HTML5 Doctor CSS Reset

Yahoo! (YUI 3) Reset CSS

 

その他

Normalize.css

A Modern CSS Reset

 

Vagrant/AmazonLinux2 – Railsインストール

概要

VagrantのAmazonLinux2仮想環境rbenv/Rubyをインストール後、Railsをインストールした記録。

  • ホスト:Windows10
  • ゲスト:Vagrant + VirtualBox + bento/amazonlinux-2

Railsの最新版ではなく、オリジナルの環境に併せて特定のバージョンを指定してインストールした。

Railsに影響する機能の停止

SELinux

もともとSELinuxは無効状態だった。

firewalld

そもそもfirewalldはセットされていなかった。

Railsのインストール

一応、gemで使用できるRailsの確認。使用可能なRailsはない。

gemでRailsのバージョン5.1.7を指定してインストール。

再度使用可能なRailsを探して、インストールされていることを確認する。

Railsサーバーの稼働

エラー~JavaScriptランタイムがない

テスト用のプロジェクトを生成してRailsサーバーを起動しようとしたところ、エラーになった。

Node.jsでもよさそうなので、CentOS7と同じ手順Node.jsをインストール。Rails6では最新安定版のNode.jsだと警告が出たのでダウングレード下が、Rails5では最新版では警告が出なかった。

ここまででrails serverの実行が可能になった。

ホストブラウザーからの接続

vagrantfileに以下の1行を記述

config.vm.network "forwarded_port", guest: 3000, host: 3000

テスト用のプロジェクトを生成してrails sを実行すると、「このサイトにアクセスできません」と弾かれる。

netstatで確認すると、ポート3000は開いている。

サーバー立ち上げのオプションを以下の様にして接続成功。

rails s -b 0.0.0.0

以前参考にしたサイトを再度確認すると、Rails4.2以降ではこの接続方法になるとのこと。オリジナルの環境ではrails sで十ていたが(エイリアス?)。

既存プロジェクトの実行

オリジナルの環境でつくったプロジェクトをダウンロードし、共有フォルダー経由で仮想環境に移して実行したところ、db:createでエラーが出た。

指示通りにbundle install

この後db:migrationは問題なく、これでアプリケーションがオリジナルの環境通りに実行できるようになった。

一方、仮想環境で作ったプロジェクトをオリジナルの環境にアップロードした場合、オリジナル側でbundle installが必要になったが、これで問題なく実行できた。

 

Vagrant/AmazonLinux2 – rbenv/Rubyインストール

概要

VagrantのAmazonLinux2仮想環境にrbenv&Rubyをインストールした記録。

  • ホスト:Windows10
  • ゲスト:Vagrant + VirtualBox + bento/amazonlinux-2

Gitのインストール

CentOS7仮想環境と同じ方法でGitをインストール。

バージョン確認

rbenv/Rubyのインストール

CentOS7仮想環境と同じ方法でインストール・設定(ライブラリーのインストールも含む)。

  • Gitからrbenvをクローン
  • .bash_profileの設定
  • Gitからruby-buildをクローン
  • Rubyに必要なライブラリーをインストール

Rubyインストール時に最新バージョンではなく過去のバージョンを指定してインストール。

  • rbenv install --list-allで全バージョンを確認
  • Rubyのインストール時に、バージョンを指定してインストール
  • rbenv globalで通常使うバージョンを指定

 

Vagrant – 仮想環境構築 – Amazon Linux 2

概要

クラウドで利用していたAWS(Amazon Web Service)のEC2/Cloud9の環境をVagrantでローカルに構築した記録。利用時の環境に併せて、OS、MySQL、Ruby、Railsのバージョンをできるだけ整合させた。

オリジナルの環境

  • OS : Amazon Linux AMI release 2018.03
  • MySQL : mysql Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.1
  • Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
  • Rails : Rails 5.1.7

構築した環境

  • OS(Box) : bento/amazonlinux-2 (virtualbox, 1.2.1)
  • MySQL : Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.1
  • Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
  • Rails : Rails 5.1.7

Vagrant/VirtualBoxの導入

Vagrant – 仮想環境構築 – CentOS7を参照。

Boxの導入

ダウンロード

vagruntupFind Boxesでキーワードamazonを含むBoxを検索し、bento/amazonlinux-2(1.2.1)を選択。

このBoxをvagrant addコマンドでローカルに追加。

仮想環境の初期化

ディレクトリー\vagrant\amazonlinux2を作成・移動し、vagrant initでダウンロードしたBoxで環境を構築。

仮想環境の利用

仮想環境の起動

vagrant upコマンドで仮想環境を起動。初回起動時は多数のパッケージインストールや依存関係の解決で時間がかかる。

仮想環境へのログイン

vagrant sshコマンドで仮想環境にログイン。EC2のロゴが表示される。

システム情報

リリースの表現が違っている。

構築したシステム情報

オリジナルのシステム情報

ロケールとタイムゾーンの設定

確認

タイムゾーンがUTC、ロケールはLANG=enになっている。

ロケールの設定

ロケールをJPに設定して再起動。表現は日本語になるが、まだタイムゾーンはUTC。

timedatectlで現在のロケールを確認。UTC。

タイムゾーンの設定

timedatectl list-timezonesで設定可能なタイムゾーンを確認。

タイムゾーンをAsia/Tokyoに設定。

その他の設定

共有設定、Atomでの接続はCentOS7と同じ手順で完了。