8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

アドカレ記事になりそうなネタを探そうと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:$HOMEcredentials.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の勉強になりました。

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?