はじめに
こんにちは。私はアメリカで独学でエンジニアを目指している者です。以前の記事でも取り上げましたが、Qiitaへ投稿しGitHubにもpushするスクリプトと、Linuxのcronを活用した自動投稿機能の組み合わせにより、Qiitaへの投稿を自動化できるのではないかという仮説のもと、GitHub Actionsで実現可能であることを確認し、実際に作ってみました。すべてを一気に解説すると長くなりそうなので、以下の3本立てで記事を構成する予定です。
- システムの仕組み構築(作戦編)
- QiitaおよびGitHubへのpushを行うスクリプト
- Xへの自動ポストを作成するスクリプト
システム開発に至った背景
2月から3月中旬まで日本に一時帰国するため、これまでのようにPCをすぐに立ち上げて作業できる環境が確保できない可能性がありました。また、限られた勉強時間の中で記事投稿の手間をできるだけ省きたいという思いから、この自動化システムの開発に取り組むことにしました。
まずは、記事投稿の流れを説明する前に、ディレクトリ構成と管理方法についてご紹介します。
ディレクトリ構成
以下のようにディレクトリを整理しています。
ユーザー/
├─ refuge_qiita/
│ ├─ stock1.md
│ ├─ stock2.md
│
├─ qiita_github/ ← GitHubで管理しているリポジトリ
├─ public/
├─ article1.md
├─ article2.md
├─ article3.md
-
qiita_github/
GitHub上で管理しているリポジトリです。 -
refuge_qiita/
まだQiitaに投稿していない記事をストックとして保存しておくためのディレクトリです。記事をqiita_github/
に置くと、どこまで投稿済みかが分かりにくくなるため、別に管理しています。
この方法が最適かは今後の検討課題ですが、現状はこのような形で記事を管理しています。
記事投稿の流れ
自動化する前の、手動での投稿手順は以下の通りです。
-
記事ファイルの移動とリネーム
mv
コマンドを使用して、投稿する記事ファイルをqiita_github/
に移動します。
その際、qiita_github/public
内の最新のファイル(例:article3.md)の番号に1を足した名前(例:article4.md)にリネームし、npx qiita article4
コマンドでQiitaへ投稿します。 -
GitHubへのPush
git
コマンドを利用して、変更内容をGitHubにpushします。 -
記事の共有
Qiita上でXボタンをクリックし、記事を共有します。
自動化に必要な処理
上記の流れを完全自動化するため、以下の処理が必要です。
-
記事ファイルの選択と移動
refuge_qiita
から、最も番号が小さいストックファイルを選択し、qiita_github/public
へ移動します。
移動後、qiita_github/public
内の最新のarticle番号に1を足した名前にリネームし、~/qiita_github
ディレクトリに配置、必要なターミナルコマンドを実行するファイルを作成(済)。 -
定期実行の設定
cronを用いて、毎日決まった時間に上記の処理を自動で実行します。 -
クラウド上での実行
GitHub Actionsの.github/workflows
を利用し、クラウド上でスクリプトを実行する仕組みを構築します。
実装にかけた時間と工夫した点
実際に実装を進める中で、以下の点に取り組みました(全体で約5時間程度の作業でした)。
-
リポジトリの管理
refuge_qiita/
をGitHub上にPush(公開の必要がないためprivateリポジトリを使用)。 -
Qiita CLIのセットアップ
GitHub Actions上でQiita CLIを実行するため、qiita-cliのインストールコマンドを実行。 -
認証情報の管理
privateリポジトリからファイルを取得するために、PAT(Personal Access Token)が必要。 -
Qiita記事の情報取得
Xに投稿する際、Qiitaの記事URLおよびタイトルを同時に取得する必要がある。 -
X APIの利用
XのAPIを利用するため、X Developerへの登録とTokenの取得が必須。 -
専用gemの活用
X専用のgemを利用して、ymlファイルおよびRubyスクリプトの作成を行いました。
これらの具体的な実装手順については、次回以降の記事で詳細に解説していく予定です。