はじめに
アドカレ記事になりそうなネタを探そうとQiitaをいじっていたら、Qiita CLIというのが追加されていることに気づきました。
自分は環境はなるべく汚さないようにしたい人なので、CLI系のツールはできるだけDockerでコンテナ化してみたいと考えるので、せっかくなのでコンテナ化しました。
(先に言うとdocker run
のところで死ぬほど時間がかかってます)
Dockerfile
コンテナなのでqiita-cliはグローバルにインストールしちゃいます。
FROM node:20
RUN npm install @qiita/qiita-cli -g
RUN mkdir /work
WORKDIR /work
使い方
build
docker build . -t qiita-cli
(無ければ)クレデンシャル用ディレクトリ作成
mkdir ~/.config
エイリアス設定
ここに死ぬほど時間かかりました。エイリアスというかdocker run
での使用方法ですね。以下npxコマンドはこのエイリアス前提です。
alias npx="docker run --rm -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -u $(id --user):$(id --group) -v $PWD:/work -v $HOME:$HOME -p 8888:8888 -it qiita-cli npx"
ボリュームマウントやユーザーなどオプションを付与しまくってます。別にオプションを付与しなくても動くのですが、sudoが利用可能なユーザやrootユーザでないと不便な使い方になります。
現在dockerがrootで実行しているので、一般ユーザでdockerを使用している場合Qiita CLIによって作成されるファイルのオーナーが全てrootになってしまい、sudoを頻繁に使用する必要がありました。そのためなるべく一般ユーザでもどうにかできないかと試行錯誤した結果があれです。一応以下にどんな意図で設定したかメモしておきます。
-
-v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro
:コンテナ内とホスト上のユーザーのUID,GIDをそろえるためマウントしました。自分の環境ではホストで使用しているユーザのuidが1000で、コンテナのuid=1000のユーザはnodeだったので、その辺をそろえるための設定です。 -
-u $(id --user):$(id --group)
:現在ホストにログインしているユーザのUID,GIDと同じコンテナ上のユーザが、Qiita CLIのコマンドを実行するようになります。 -
$PWD:/work
:Qiitaの記事やGitHub関連のファイルが作成されるディレクトリの指定です。$PWD
を固定にしてしまった方が人によっては楽かもしれません(本格的にこれを使用するのであれば自分も固定しようと思ってます) -
$HOME:$HOME
:credentials.json
をコンテナにマウントするための設定です。~/.config/qiita-cli/credentials.json
だけマウントしたかったのですが、ユーザが/etc/passwd
で作成しているだけなので、ユーザのディレクトリ/home/~
がないと怒られたので丸々マウントしました。 -
-p 8888:8888
:Qiita CLIではプレビューモードが存在し、webサーバとなって作成中のQiita記事を見ることが可能です。その際のポート指定です。
Qiita CLI初期設定
init
$ npx qiita init
設定ファイルを生成します。
Creating /work/.github/workflows/publish.yml
Created!
Creating /work/.gitignore
Created!
Creating /work/qiita.config.json
Created!
Success! ✨
次のステップ:
1. トークンを作成してログインをしてください。
npx qiita login
2. 記事のプレビューができるようになります。
npx qiita preview
プレビュー画面アクセス用設定
コンテナで使用するため、デフォルトのlocalhostのままではコンテナの外からアクセスできなくなります。そのため0.0.0.0
に修正です。
sed -i s/localhost/0.0.0.0/ qiita.config.json
ログイン設定
$ npx qiita login
以下のURLにアクセスしてトークンを発行してください。(「read_qiita」と「write_qiita」にチェックを入れてください)
https://qiita.com/settings/tokens/new?read_qiita=1&write_qiita=1&description=qiita-cli
発行したトークンを入力: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Hi <user>!
ログインが完了しました 🎉
以下のコマンドを使って執筆を始めましょう!
🚀 コンテンツをブラウザでプレビューする
npx qiita preview
🚀 新しい記事を追加する
npx qiita new (記事のファイルのベース名)
🚀 記事を投稿、更新する
npx qiita publish (記事のファイルのベース名)
💁 コマンドのヘルプを確認する
npx qiita help
記事作成時メモ
あとはQiita CLIの公式ドキュメントの通り記事作成、投稿などをすればいいので詳細は省きます。
Qiita CLIを使用したことがない方向けに、作成する記事ファイルは以下のように、mdファイルの上部はyaml形式でメタデータ記入、下に記事本文といったファイルで記事を作成します。
---
title: Dockerを使用してQiita CLIを使いたい
tags:
- Qiita
- CLI
- Docker
- QiitaCLI
private: false
updated_at: null
id: null
organization_url_name: "microad"
slide: false
ignorePublish: false
---
# はじめに
※以下記事本文
おわりに
DockerでQiita CLIが使えるようになったところまでなのでこの辺で。GitHubのワークフローについてはまだ試せてないので、その辺も試したいですね。
また今回の件を試していて、もしかしたら業務で共有したコンテナ周りのオーナーがおかしいかもしれないことに気づいたので、ちょうどよいDockerの勉強になりました。