こんにちは!
シタテル株式会社CTOの和泉です。
今日はシタテルの技術ブログの管理について紹介します。
シタテルは衣服づくりのプラットフォームを提供しているスタートアップ企業ですが、
実は3分の1以上がエンジニア、デザイナーというIT企業でもあります。
(あまり知られてないので主張します!)
突然ですが、ここで質問です!
プログラマの好きなもの3つはなんでしょう?
答えは!?
GitHub
マークダウン
デプロイ自動化
ですよね!そうに違いない!
この独断と偏見に基づいて、シタテルの技術ブログはマークダウンで記述して、GitHubで管理レビューをして、
CircleCIによって自動的にデプロイされる仕掛けにしてみました。
この仕組で社内のメンバーの皆さんに1スプリントに1ブログをお願いしています。
さて、今回はその 仕組みと投稿の手順を簡単に紹介します。
しくみ
仕組みと行っても難しいことをしているわけではないのですが、、、
APIの充実したブログサービスとして、知識のない私はBloggerしか思いつきませんでした。
しかし、Bloggerはマークダウンでは投稿できません。なので、マークダウンで記述したファイルをプログラムでHTMLに変換しています。
また、画像等のファイルは マークダウンで書いたテキストそのままを投稿してもどうにもなりませんので、変換後のHTMLのDOM構造からリンクURLを抽出してAmazon S3にアップロード&URLの書き換えを行っています。
以下の手順に出てくるURLはシタテル社員限定公開なのですが、
こちらの公開リポジトリでその部分のコードはご覧いただけます。
https://github.com/shinobushiva/blogautomation
手順
前準備(初回のみ)
1. https://github.com/sitateru/tech-blog をクローン
git clone https://github.com/sitateru/tech-blog
2. masterブランチから新しいブランチを作成してチェックアウト
git branch shinobu.izumi
git checkout shinobu.izumi
ここでは例として shinobu.izumi
というブランチを作っています。
ブランチは1人1つを使いまわしても、各自が記事ごとに切るなどしても構いません。
3. posts/blog/
配下に個人のフォルダを作成(フォルダ名は個人が特定しやすい名前にしてください)
ここでは例として shinobu.izumi
というフォルダを作っています。
新しい記事を追加する場合
0. masterブランチをpull
最新のmasterブランチを忘れずにpullします。
1. 自身のフォルダ内に記事のフォルダを作成(フォルダ名は自由)
2. フォルダ内に記事を作成
最低限必要なファイルは content.md
とmeta.json
です。
content.md
投稿する記事の内容をマークダウン形式で記述します。
meta.json
記事のメタ情報を記述します。親フォルダの内容を継承しますが、子フォルダの内容で上書きされます。
例は最後に記述してあります。
3. ブランチをリモートリポジトリにプッシュ
git push origin shinobu.izumi
4. publish ブランチ向けにPR
GitHub上で publishブランチに向けてPRを出します。
レビュー後にマージします。
meta.json 例
{
"blogId": "1797929185044797553",
"isDraft": true,
"publish": false,
"revert": false,
"isPage": false,
"ignore": false,
"forcePost": false,
"contentPath": "content.md"
}
{
"ignore": false,
"resource": {
"title": "シタテルのオンライン衣服生産システム"
}
}
以下はBloggerAPIへの指定パラメーター(の一部)です。
キー | 意味 |
---|---|
blogId | 投稿対象とするブログのIDです |
isDraft | true - 下書きとして投稿します |
publish | true - 下書きのものを公開に変更します |
revert | true - 公開のものを下書きに変更します |
resource.title | 記事のタイトルを指定します |
以下は本システム向けの設定です。
キー | 意味 |
---|---|
isPage | true - ページとして投稿, false - 記事として投稿 |
ignore | true - そのフォルダの記事に対する処理を無視 |
forcePost | true - すでに記事が存在している場合でも新しく記事を投稿 |
contentPath | マークダウンファイルの名前(変更の必要なし) |
記事のブログへの公開
publishブランチにマージすると、CircleCIが動いて自動的にブログに投稿します。
CircleCIの内部で公開日時などのメタ情報を更新したものをmasterブランチにプッシュします。これにより公開情報をGithubに記録しています。
おわりに
以上、シタテルの技術ブログの管理についてでした。
これから、シタテルで働いているメンバーが使っている技術や日々の業務の中で取り組んだ内容などをお伝えしていきます !