やりたいこと
新しいフォントを導入し、view上に反映させたい
起こっていること
assets内にfontsフォルダを作成し、その中にフォントファイル(ttfファイル)を設置。
@font-faceにてscssファイルに読み込みを実施し、scssで記述。
hamlでクラス付与して画面をリロードするもコンソール上で、ttfが見つからない、と404エラー発生。
#主なソースファイル
##ディレクトリ構造
app ├── assets │ ├── fonts │ │ ├── Dvmarticulations-Yqpy.ttf //←こちらはまだ一度も読み込んでいない。 │ │ └── Musisync-qYy6_base.ttf //←読み込もうとしているフォントファイル │ └── stylesheets │ ├── application.scss │ ├── (中略) │ ├── modules │ │ ├── (中略) │ │ ├── font_read.scss │ │ └── (以下略) │ └──(以下略) ├── (中略) └── views ├── (中略) ├── songs │ ├── (中略) │ ├── show.html.haml │ └── (以下略) └── (以下略)
##stylesheet>modules>font_read.scss:@fontfaceによる読込み
scss
1// ↓これから読み込むフォントファイル 2@font-face { 3 font-family: "score-base"; 4 src: font-url("Musisync-qYy6_base.ttf") format("truetype"); 5 font-weight: normal; 6 font-style: normal; 7} 8 9// ↓未だ読み込んだ実績がない、あとで利用しようとして記述しているフォントファイル 10@font-face { 11 font-family: "score-repeat"; 12 src: font-url("Dvmarticulations-Yqpy.ttf") format("truetype"); 13 font-weight: normal; 14 font-style: normal; 15}
##applicationファイルによる@font-face記述ファイルの読込み
scss
1@import //他にもmodulesフォルダから読み込み実績あり 2@import "modules/font_read"; 3 4.font_base { 5 font-family: "score-base"; 6}
##ビューファイル:Railsヘルパーメソッドとhamlの併用
haml
1.content__chord 2 - @song.chords.each do |chord| 3 - chord_array = chord.text.split(//) 4 - chord_array.each do |char| 5 -#↓フォント読み込み用のクラスを付与 6 %a.font_base 7 =char 8 %br
##その他
フォント導入にあたって参考にしたWebの記事
Qiita
#仮説と検証
##アセットパイプラインへの追加
web-fonts-asset-pipeline
GitHubにて、assets中のfontsファイルをアセットパイプラインへの追加するために記述が必要、という情報がありました。
terminal
1├── app 2└── config 3 ├── application.rb 4 └── (以下略)
config>application.rbに追記したものが下記
rails
1require_relative 'boot' 2require 'rails/all' 3Bundler.require(*Rails.groups) 4 5module GrassChords 6 class Application < Rails::Application 7 config.load_defaults 5.2 8 config.time_zone = 'Asia/Tokyo' 9 config.i18n.default_locale = :ja 10 # ↓追加の記述 11 config.assets.paths << Rails.root.join("app", "assets", "fonts") 12 end 13end
→結果:変化なし
##@font-face中のformat()の使い方間違い?
呪文としてコピペしていたので確認
CSS Web Fonts
ファイル形式を選択するものと判断。
ttf=true type fontなので問題なし、と判断
###scssファイルの保存場所がまずい?
@font-face中でsrcを指定しているfont-url記述にはファイル名しか書かれていない。
modulesの中のファイルに@font-faceを記述しているのがまずいのではないか
###modle>font-_readの記述をapllication.scssに移動
→結果:変化なし
###src指定の方法をfont-urlからurlに変更
scss
1url("/assets/fonts/Musisync-qYy6_base.ttf")
と記述。
→結果:変化なし
##まだ試していない妥協案
Rails6にて同じ症状の質問を発見
Teratailで似たような症状の質問を発見。
/public下にfontsフォルダを置き、/fonts/ファイル名とすることで読み込み。
publicフォルダが散らかっていくことに抵抗があるため、こちらの手法はあとで検討したいと思います。
##補足
それぞれ単体で試しましたがアセットパイプラインへの追加のための記述だけは常に有りのまま進めています。
#補足情報(FW/ツールのバージョンなど)
##開発環境
- OS macOS Catalina (10.15.4)
- VScode (1.45)
※develop環境でのみ動作確認しています。
##ソフトウェアバージョン
- ruby 2.5.1p57
- rails (5.2.4.2)
- haml (5.1.2)
- haml-rails (2.0.1)
- mysql2 (0.5.3)
- sass (3.7.4)
- sass-rails (5.1.0)
- 他にjQueryを併用しています
以上です。
ご教示のほど、よろしくお願いいたします。
#追記
##使用フォント
MusiSync Font
画面上にコード譜を表示するために音楽記号が使えるようなフォントを使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。