この記事は実装 PR を元に、Github Copilot が記事の大枠を書いています。
内容の精査や書き直しは記事主が十分に行なっておりますが、その点ご注意ください。
概要
Qiita CLI を docker 環境で使いたい方のための手順書になっています。
目標
- ローカルに依存しない Qiita CLI 実行環境
- プレビューを
http://localhost:8888から直接閲覧 - docker コンテナ内で毎回の
npx qiita loginを不要化
導入ステップ概要
- 最小構成の
Dockerfileを作成(Node.js 20 ベース) -
docker-compose.ymlでコンテナ起動・作業ディレクトリ/ポート/認証情報を定義 - Qiita CLI 設定ファイルの
hostを0.0.0.0に変更 - chmod 700 ~/.config/qiita-cli`
- 認証情報ディレクトリ(
~/.config/qiita-cli)をマウントしてログイン状態維持
途中で遭遇した課題と対応
| 問題 | 原因 | 解決 |
|---|---|---|
| docker コンテナ内だと毎回ログインが必要 | コンテナ再生成で認証情報消失 |
~/.config/qiita-cli をマウント |
プレビュー URL が [::1]:8888
|
IPv6 ループバック + コンテナ外未公開 |
host: 0.0.0.0 + ports: "8888:8888"
|
| ホストから見えない | バインドアドレスが localhost
|
qiita.config.json を修正 |
| マウント時に permission denied | ディレクトリ権限不適切 | chmod 600 ~/.config/qiita-cli |
追加したファイル
Dockerfile
FROM node:20
WORKDIR /workspace
COPY package.json package-lock.json* ./
RUN if [ -f package.json ]; then npm install; fi
CMD ["bash"]
docker-compose.yml
services:
qiita-contents-dev:
build: .
image: node:20
container_name: qiita-contents-dev
working_dir: /workspace
volumes:
- ./:/workspace
- ~/.config/qiita-cli:/root/.config/qiita-cli
ports:
- "8888:8888"
tty: true
stdin_open: true
command: bash
qiita.config.json(変更)
{
"includePrivate": false,
"host": "0.0.0.0",
"port": 8888
}
実行手順
1. ビルドと起動
docker compose up
2. コンテナへ入る
docker compose exec qiita-contents-dev bash
3. 初回ログイン(1 度だけ)
npx qiita login
4. プレビュー表示
npx qiita preview
# ブラウザで http://localhost:8888
5. 記事作成例
npx qiita new "hogehoge"
npx qiita preview
つまづきどころ
- host を
0.0.0.0にしないとホスト側ブラウザで見えない - 認証情報マウントディレクトリを間違える(
~/.config/qiitaと~/.config/qiita-cli) - 権限を
400にすると更新できないことがある →600or700推奨 - コンテナを再生成すると未マウントの認証情報は消える
- IPv6 表示 (
[::1]:8888) に戸惑うがlocalhost:8888で OK
学び
- 既存 CLI ツールは「認証情報の永続化」「ネットワーク公開」の 2 点を押さえるだけで Docker 化がスムーズ
- ホスト → コンテナのアクセスは「アプリ側の bind 設定」と「Compose 側の port 公開」がセット
- 毎回ログイン発生時は「認証ファイルはどこにあるか」を最初に確認する
まとめ
Qiita CLI を Docker 化することで、環境依存を排除し再現性の高い記事執筆フローを構築できました。
認証情報マウント・host: 0.0.0.0・ポート公開の 3 点を押さえれば同様の導入が可能です。