今更ながら,はてブではマークダウン記法でブログの内容を記述することに気付きました。
これから気をつけます!
作っているブログですが、残りはブログ記事の表示をさせるところまでできました。
はてなAPIを叩くべく、調べながら実装していってるところです。
今日あったことをまとめておこうと思います。
使用技術
- Ruby on Rails 8
- Docker
はてなブログAPIの認証情報を入れる
.envファイルに以下を記述する。
HATENA_USERNAME=自分のユーザー名 HATENA_BLOG_ID=ブログID HATENA_API_KEY=APIキー
このとき、間にスペースをいれたり、シングルクォーテーションは入れないことに注意する。
はてなブログAPIのServiceクラスを書く
ここの中身についての詳細は、きちんと実装できてから書きます!
とりあえず、こんな感じで書いていました。
class HatenaBlogService
BASE_URL = "https://blog.hatena.ne.jp"
def initialize
@username = ENV['HATENA_USERNAME']
@blog_id = ENV['HATENA_BLOG_ID']
@api_key = ENV['HATENA_API_KEY']
end
~~~
問題発生! コンソールでの確認
$ rails consoleで、きちんと読み込めているか確認。
new-blog(dev)> service = HatenaBlogService.new => #<HatenaBlogService:1234123412341234 @api_key=nil, @blog_id=nil, @username=nil>
値が nil になっていました。
続いて、Dockerでのコンテナでの確認。
$ docker compose exec web bash echo $HATENA_USERNAME echo $HATENA_BLOG_ID echo $HATENA_API_KEY
そもそもサービスクラスが渡っていなかったようです。
原因は Gemfile と compose.yml
調べていくと、
gem 'dotenv-rails'が入っていなかったcompose.ymlにて環境変数管理ができていないこと こと
上記2点が原因でした。
compose.ymlにて環境変数管理
compose.ymlにて以下を追記。
services:
web:
build: .
ports:
- "3000:3000"
# 追記は以下
env_file:
- .env
または
services:
web:
build: .
ports:
- "3000:3000"
environment:
- HATENA_USERNAME=${HATENA_USERNAME}
- HATENA_BLOG_ID=${HATENA_BLOG_ID}
- HATENA_API_KEY=${HATENA_API_KEY}
ここで、認証情報を直接書かないことに注意です。
gem 'dotenv-rails'をいれる
Gemfileに 追記。
gem 'dotenv-rails', groups: [:development, :test]
dotenv-railsにて、アプリ直下の.envファイルが自動的に読み込まれるようになります。
これで設定が終わりました。
Dockerの再設定をして、再度確認しましょう。
これで読み込まれるようになっているはずです。
まとめ
以下の流れで認証情報が読み込めるようになりました。
- .envファイル作成
- compose.ymlでenv_file指定
- コンテナ再起動で設定反映
- 動作確認
認証情報が見られちゃうと、最悪ブログ消されてしまうので注意して実装していきましょう!
誰かの役に立てると幸いです。