Github Codespaces でZennの執筆環境を整える
Zennの記事編集はブラウザから行うこともできますが、をGithubと連携させることにより記事をGitで管理できるようになります。
Gitとの連携方法については以下に書かれています。
Githubと連携した際には、Github Codespacesで編集できるように設定しておくと便利です。
この記事では私が行なっている設定について記載します。
Github Codespacesを使うメリット
Github Codespacesとは
Githubに登録してあるコードをブラウザ上で編集する機能のことです。ブラウザ上でVisual Studio Code相当のエディタが立ちあがります。Visual Studio Codeの各種エクステンションが使えたり、テストの実行やTermninalからの操作など、ほぼローカルのVisual Studio Codeと同様の開発が行えます。
毎月60時間分の無料枠があり、無料枠内で使えば料金の請求はありません。とても便利で太っ腹な機能なので使わない手はありません。
ZennをGithub Codespacesで利用するメリット
Zenn標準のブラウザ編集と比べると
- Gitを使用した記事の履歴管理ができる
- VisualStudioCodeの高機能なエディタやエクステンションによる編集補助が使用できる
という従来のGithub連携のメリットに加え、ブラウザから編集できるため、
- 面倒な環境構築が不要で、ブラウザさえあれば執筆ができる。iPadでも可能。
- 出先でノートPCで執筆した後、家に帰ってから続きをデスクトップPCで執筆、といったことができる。
というようなメリットがあります。
設定方法
Githubとの連携自体はここでは解説しません。既に連携済みという前提で説明します。
ディレクトリ構成
Githubのリポジトリ内は以下のような構成になります。
|-- .devcontainer # Github Codespacesの環境設定ファイルを置くフォルダ
| |-- Dockerfile
| `-- devcontainer.json
|-- .gitignore
|-- .markdownlint-cli2.jsonc # Markdown Lintの設定
|-- .textlintrc.json # Text Lintの設定
|-- articles/ # 記事を格納するフォルダ
|-- books/ # 本を格納するフォルダ
|-- package-lock.json
`-- package.json
.devcontainer
.devcontainerディレクトリ配下には以下の2つのファイルを置きます。
- Dockerfile
- devcontainer.json
Github CodespacesのWorkspaceはコンテナ上に展開されます。Dockerfile
はそのコンテナの作成方法を定義しています。
FROM node:20
# Install basic development tools
RUN apt update && apt install -y less man-db sudo git-flow
# Ensure default `node` user has access to `sudo`
ARG USERNAME=node
RUN echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME
# Set `DEVCONTAINER` environment variable to help with orientation
ENV DEVCONTAINER=true
devcontainer.json
にはCodespace作成に関する全般的な設定を記載します。postCreateCommand
はコンテナ作成後に実行するコマンドを書きます。ここではnpmパッケージのインストールを行なっています。
extensions
にはこのCodespaceで使用するvscodeのエクステンションのリストを記載しています。
// See https://containers.dev/implementors/json_reference/ for configuration reference
{
"name": "Zenn",
"build": {
"dockerfile": "Dockerfile"
},
"postCreateCommand": "npm install",
"remoteUser": "node",
"customizations": {
"vscode": {
"extensions": [
"ms-azuretools.vscode-docker",
"donjayamanne.git-extension-pack",
"yzhang.markdown-all-in-one",
"taichi.vscode-textlint",
"DavidAnson.vscode-markdownlint"
]
}
},
"features": {
"ghcr.io/wxw-matt/devcontainer-features/command_runner:0": {}
}
}
node関連
package.json
にはzenn関連パッケージに加えてtextlint, markdownlintパッケージを入れています。
{
"name": "zenn",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"zenn-cli": "^0.1.151"
},
"devDependencies": {
"markdownlint-cli2": "^0.12.1",
"textlint": "^13.4.1",
"textlint-rule-preset-ja-spacing": "^2.3.0",
"textlint-rule-preset-ja-technical-writing": "^10.0.1",
"textlint-rule-spellcheck-tech-word": "^5.0.0"
}
}
markdownlintの設定
設定は好みで変えてください。
{
"config": {
"no-bare-urls": false,
"single-h1": false
}
}
以下のページを参考にしました。
textlintの設定
設定は好みで変えてください。
{
"plugins": {},
"filters": {},
"rules": {
"preset-ja-spacing": true,
"preset-ja-technical-writing": {
"ja-no-successive-word": {
"allowOnomatopee": true
}
},
"spellcheck-tech-word": true
}
}
以下のページを参考にしました。
使い方
Githubの<>Code
プルダウンメニューからCodespaces
タブを開き、Codespaceを作成します。
するとCodespaceの作成が始まります。
作成が完了すると以下のようなVSCodeっぽい画面が表示されます。
あとはVSCodeと同じように記事の編集が可能となります。
Discussion