こんにちは、22新卒でラクスル事業本部の灰原です。この度、ラクスル株式会社*1の公式テックブログをリニューアルし、こちらのはてなブログを開設しました! この記事ではテックブログをリニューアルした背景に加えて、GitHub上ではてなブログの記事を管理・レビューする手法について紹介します。
リニューアルの背景
ラクスルではこれまでもテックブログ を運営してきました。 また昨年からはアドベントカレンダー企画も行っています。 qiita.com しかしながら、当時利用していたブログシステムでは社内のユースケースに合わない部分がありました。
- レビューのフローが煩雑
- これまでの運用では、レビューのフローが煩雑でした。例えばNotionに原稿を書いて、それを上司に渡してコメントをもらい、修正が終わったらまた上司に連絡して、というように、レビューイ・レビュアーともに負担が大きいものでした。
- 同時編集が難しい
- 特にアドベントカレンダーの準備期間には、複数人がそれぞれの記事を編集したいことがあります。以前のシステムでは、サイト全体としての変更を追従する方式だったため、システム上で複数人それぞれの編集を進めることが困難でした。
これらの課題が浮かび上がったことから、エンジニアが楽しく書き続けられるテックブログを目指してリニューアルに踏み切りました。
ブログ運営を支える技術
ラクスルは「仕組みを変えれば、世界はもっと良くなる」をビジョンに掲げる企業です。 この度のテックブブログリニューアルにあたって、上記課題を解決するため、有志のエンジニア数名で「仕組みを変える」ことに挑みました。
まず上記課題は、GitHubで記事を管理することで、以下のように解決できると考えました。
- レビューのフローが煩雑 --> GitHub上でのレビュー・承認を可能に
- 同時編集が難しい --> PR毎に複数人がそれぞれ編集できるように
これを実現するために、GitHub ActionsからはてなブログAPIを利用するワークフローを構築しました (下図)。
はてなブログAPIへのアクセスには、blogsyncを使っています。blogsyncについてはこちらの記事で紹介されています。 現状では、社内のユースケースに合わせて機能を追加したフォーク版を使っていますが、今後PRをお送りしてupstreamのものを使うようにできればと思っています。
記事の作成・レビュー・公開フロー
さて、記事の作成・レビュー・公開は、以下の手順で行われます。ポイントは、記事を編集する際、ローカルにcloneしたものを編集する場合と、はてなブログのUIから直接編集する場合があることです。GitHub Actionsのワークフローを工夫して、これら両方に対応できるようにしています。
記事の作成
- 執筆者は、はてなブログから記事の下書きを作成する。
- 執筆者は、ローカルでスクリプトを実行する。 (編集画面のURLを引数に与える)
- この時スクリプトは、編集画面のURLからエントリID*2を取得し、それを元にしたGitブランチを作成して
git push
する。ブランチがpushされると、GitHub Actionsのワークフローが発火する。この時ワークフローは、ブランチ名からエントリIDを取得し、はてなブログAPIでそのエントリIDに一致する記事を取得する。また変更内容をステージしてgit push
する。
- この時スクリプトは、編集画面のURLからエントリID*2を取得し、それを元にしたGitブランチを作成して
- 執筆者は、上記ワークフローが終了したことを確認して、
git pull
する。- ここで上図の黒い四角で示した3つ (はてなブログ・GitHub・Local Git Repo)で当該記事が同期された状態になる。
レビューと修正
- 執筆者は、GitHubでレビュアーを設定する。
- レビュアーは、指摘事項をコメントする。
- 執筆者は、指摘事項をローカル or はてなブログから修正する。
- ローカルから修正を加えた場合、執筆者は、変更をステージして
git push
する。- コミットがpushされると、GitHub Actionsのワークフローが発火する。この時ワークフローは、レポジトリ上の記事をはてなブログに同期する。また変更内容をステージして
git push
する。
- コミットがpushされると、GitHub Actionsのワークフローが発火する。この時ワークフローは、レポジトリ上の記事をはてなブログに同期する。また変更内容をステージして
- はてなブログから修正を加えた場合、執筆者は、空コミットをして
git push
する。- コミットがpushされると、GitHub Actionsのワークフローが発火する。この時ワークフローは、コミットが空だった場合、はてなブログからレポジトリに記事を同期する。
記事の公開
- レビュアーは、指摘事項が修正されたことを確認して、PRをApproveする。
- 執筆者は、PRをmainブランチにマージする。
- PRがmainブランチにマージされると、GitHub Actionsのワークフローが発火する。この時ワークフローは、レポジトリからはてなブログに記事を同期する。
ここで記事が公開されます。複雑そうに見えますが、やっていることは普段の開発でのGit/GitHubの操作とほとんど変わりません。 レビューイ・レビュアーともに使い慣れたGitHubのレビュー機能で、同時編集も気にせずに、ブログを書くことができます。
おわりに
エンジニアが楽しく書き続けられるテックブログを目指して、リニューアルを行いました。 このブログを通して、ラクスルのエンジニアの技術と文化を伝えていければと思っています!