7/10(土)から技術書典11が始まってます
弊サークル虎空棘魚からオンラインマーケットにて、「あつまれCIサービス」の増補・改訂版である「2021夏」を販売してます。
また、既刊「詳解Integromat」も販売中です。
よろしくおねがいします!
2021年7月15日木曜日
【技術書典11】 CI サービス本の増補・改訂版をリリースしました
2021年5月13日木曜日
[技術書典] Re:VIEW Starter で印刷・電子書籍版で config.yml を使い分ける
たとえば
## リンクのURLを脚注に埋め込む(PDFでのみ)。 linkurl_footnote: false # trueならリンクのURLを脚注に埋め込む(お勧め)
やり方
電子書籍版用の YAML ファイルを用意する
このとき YAML はコピペではなく、電子書籍版で設定した項目だけ書けば OK です。
例:
また、contentdir はルートの YAML にないと rake でエラーになるので注意してください。
電子書籍版用の yml ファイルを指定してビルドする
config=config-e.yml rake preproc pdf
docker run --rm -e "config=config-e.yml" -v "$(pwd)":/work -w /work kauplan/review2.5 rake preproc all
まとめ
- YAML を分ける
- inherit を利用して共通の設定を読み込む
- config 環境変数に YAML ファイルをセット
宣伝
拙著発売中です。よろしくお願いします。2021年1月14日木曜日
[Re:VIEW] mapfile 中の table が正しく表示されない場合の対応方法
Re:VIEW で一章のテキスト量が多く書きづらかったので、項単位で複数のファイルに分割して #@mapfile(sub.re) で結合してたのですが、この分割した .re ファイルに table を書いていたのが意図通りの表示になりませんでした。
(※素の Re:VIEW ではなく Re:VIEW Starter を使っています)
こんな感じ。
本来なら FREE/BASIC/STANDARD が列になるはず・・
mapfile の外に出せば問題なく表示されるのですが、table 挿入するところでサブの .re ファイルを分けないといけない(もしくは maprange?)のは面倒なので、調べました。
何が起きていたか?
preproc 後のファイルを見れば、何が起きていたのかは一目瞭然です。
table の列区切り文字であるタブがスペースになっていました。
つまり、行が全部結合されて1列になっていた。
どうしてこうなった?
preproc のソースでこの辺です。
mapfile で開いたファイルを処理している中で呼ばれるメソッドですが、タブをスペースに変換しています。tabwidth の config がなければ 8 space になっています。
そして、tabwidth が 0 なら変換なしであることがわかります。
これで対応ができそうです!
対応する
@config[tabwidth] は review-preproc の --tabwidth オプションで指定可能なので --tabwidth=0 つければ OK です。
Rake でビルドしてる場合は .rake ファイルも修正してください。
review-preproc --tabwidth=0 file.re
これでちゃんと意図したとおりに出力できました。
(用紙からはみ出ちゃってるのは行が長すぎたから・・リリース版では修正済み)
2021年1月4日月曜日
【技術書典10】「あつまれ CI サービス 2020冬」の販売を開始しました
あけましておめでとうございます。
技術書典10も残りわずかとなりましたが、このタイミングで
「あつまれ CI サービス 2020冬」の販売を開始しました。
本書は技術書典応援祭(技術書典8)で出版した「あつまれ CI サービス」のアップデート版です。Travis CI の料金体系変更への対応更新が大きな変更点になりますが、CI サービスに Wercker を追加、並列実行の比較の追加(商用版での追加分)と各 CI サービスの最新状況へのアップデートを行っています。
無印版、商用版をご購入頂いた方には重複した内容が多いので、
購入して頂く場合はその点留意していただければと思います。
それでは本年もよろしくお願いします。
2020年12月29日火曜日
【技術書典10】「詳解 Integromat iPaaS 完全入門」の販売を開始しました
こんにちは。
表題の通り、技術書典10 で「詳解 Integromat iPaaS 完全入門」の販売を開始しました。
本書は GitHub にてコンテンツ以外を公開しております。
本書へのフィードバックはこちらへお願い致します。
https://github.com/srz-zumix/book-integromat
2020年8月26日水曜日
[技術書典] Re:VIEW Starter でクローバー「♣」を別の文字に変更する
技術系同人誌を書く人の味方「Re:VIEW Starter」の紹介 - Qiita
なんとなく個人的に「♣」がしっくりこなかったので、「技術書典8(技術書典 応援祭)」で書いた本では、別の文字に変更しました。
config-starter.yml では変更できないので、変更方法を備忘録として残しておきます。
方法
\renewcommand{\starter@subsection@symbol}{$▶$}
https://github.com/srz-zumix/ci-dex-book/commit/a38b35d279660778a6e8780346f7d2f8c4389e1e
フォントさえあれば LaTex の特殊文字・記号じゃなくても問題なさげ?
(電子書籍用 PDF では問題なさそうだったので "▶" を採用した)
今回は以上。
では。
2020年7月21日火曜日
[技術書] 画像のフォーマットチェックを GitHub Actions でしてみた
name: GitHub Actions on: pull_request: jobs: example: runs-on: ubuntu-latest steps: - name: clone uses: actions/checkout@master - uses: srz-zumix/actions-book-image-check@master with: path: ./test/format formats: "JPEG, PNG" # default JPEG dpi: 300 # default 350 pixel_limit: 1000000 # default 4000000
2020年3月27日金曜日
[CircleCI] iutest のパイプラインを更新した&お詫びと訂正
先週はこちら「ブログズミ: [Azure Pipelines] iutest のパイプラインを Multi-stage pipelines に変更した」
今週は CircleCI です。
YAML の整理
まずは CircleCI のサンプルを参考にして、YAML をキレイに変更しました。もともと gcc/clang でそれぞれ 4 パターンビルドしていたジョブを、アンカー・エイリアスを駆使して gcc/clang 別々のジョブに分けました。
以下、YAML の Before/After になります。
Before
After
ファイルの先頭部分はあまり変わってないですが、ファイルの末尾あたりにあるジョブの定義とワークフローの定義が YAML のアンカー・エイリアスを使ってとてもシンブルになっていると思います。
CI が定めた名前のキーではなく、任意のキーでアンカーを作って再利用するやり方はとてもいいなーと思いました。
(CI サービスによってはスキーマにないキーを許容しないサービスもあった気もするが・・)
GitHub PR の Checks に表示する
PR の Checks に表示するには「CircleCI Checks」をインストールする必要があったみたいだったので、遅ればせながらインストールしました。「Organization Settings」の「VCS」に「Manage GitHub Checks」ボタンがあるのでそちらでインストールできます。
権限確認と適用する範囲を決めたら完了です。
このように表示されます。
お詫びと訂正
「#技術書典 応援祭」始まりました。— ずみっくす@技術書典8(技術書典 応援祭) (@srz_zumix) March 7, 2020
「あつまれ CI サービス タダではじめる継続的インテグレーション生活」の PDF 版を販売してます。
よろしくお願いします :Dhttps://t.co/igsHDPy9P2
BOOTH でも販売中https://t.co/Ks4GhSE9ib
本書で、Circle CI の 4 並列制限がなくなったと書いていましたが、あれは真っ赤なウソでした。
お詫びして訂正致します。
今回並列数を増やそうとして気づきました。。
実際には、コンテナの並列数は今までどおり 4 つまでとなっているようです。(ただ、これは CircleCI 1.0 のころの設定画面なので CircleCI 2.0 になってどう管理されいるのか、まだ良くわかってません)
また、OSS プランはベースがあくまでも Free プランなので、ジョブの並列数は Pricing 記載の通り 1 つまでの制限になっているようです。
ジョブが1つずつ実行されていることを確認しました。
これを機に、各 CI サービスの並列実行のサンプルリポジトリを作成することとしました。
近いうちに CI Specs に付け加える予定です。
以上。
2020年3月6日金曜日
[技術書典8] 技術書典 応援祭・BOOTH にて販売を開始しました
「あつまれ CI サービス タダではじめる継続的インテグレーション生活」の販売を開始しました。
第 I 部では YAML の使用事例とともに1つ1つサービスを紹介します。
第 II 部では各トピックごとに CI サービスを比較検証した内容を紹介します。
技術書典 応援祭
https://techbookfest.org/product/4931278088437760BOOTH
https://srz-zumix.booth.pm/items/1879985感想や issue お待ちしておりますmm
https://github.com/srz-zumix/techbookfest8
2020年3月3日火曜日
[技術書典] PDF から必要なページを切り出す
見本ように表紙や目次を提出することがある。
その際に出来上がった PDF から必要なページだけ取り出したいと思ったときに毎回検索して調べているので、メモです。
「Chrome で PDF を開いて必要なページを指定して印刷する」
以上。
【宣伝】
虎空棘魚は「#技術書典 応援祭」に参加します。
— ずみっくす@技術書典8Day2え08 (@srz_zumix) March 3, 2020
「あつまれ CI サービス タダではじめる継続的インテグレーション生活」と題して、
過去6年間で使ってきた「無料で使える CI サービス」の中から厳選した 13 サービスを一冊にまとめました。
よろしくお願いするだなも! pic.twitter.com/hQ6qDx5Vo1
2020年2月3日月曜日
[技術書典8] GitHub Actions で作成した PDF を Google Drive にアップロードして Slack に通知する
先週は、GitHub Actions を使って Re:VIEW Starter の PDF 作成を CI にしました。
その際に、PDF のアップロード先を GitHub Actions の Artifact にしていましたが、こちらは誰でもアクセスが可能な場所だったので、private な場所にアップロードするようにしたいと思います。
Google Drive にアップロード
Google Drive へのアップロードはこちらで紹介されているアクションを利用しました。「GitHub ActionsでLaTeXをビルドしてGoogle Driveに上げる - Qiita」
「Interact with Google Drive · Actions · GitHub Marketplace」
筆者は skicka は使ったことがなかったのでそちらの手順に従ってセットアップしました。
まずは手順通りに進めてみる
「skicka-を使ったことがない方」の手順どおりに進めていきます。手順の 1. と 2. を実行してみて、「このアプリでは「Google でログイン」機能が一時的に無効」と出た場合は、別途回避手順が必要です。
筆者がやった時点では、このメッセージが表示されましたので回避手順を行いました。
回避手順を行う
「skickaの『「Google でログイン」機能が一時的に無効』を一時的に解決する - Qiita」必要なのは、Google Drive API の Client ID と Client Secret です。
こちらを作成したら、アクションページの手順にあるとおりに ENV に 作成した ID/Secret を渡して docker run します。
回避対応は以上です。
URL が表示されているので、もとの手順(2. ブラウザで開く)にもどりましょう。
続き
回避対応が正しくできていれば、今度はアクセスできると思います。(警告出るかもしれませんが・・詳細開いて続行します)
アクセスを許可したら、コードが発行されるので docker に戻って入力します。
入力したら json が表示さます。
これで必要な情報が揃いました。
GitHub の Secrets に登録する
上記で作成した json と Google Drive API の Client ID/Secret を GitHub repository の Secret に登録します。GitHub Actions に追加する
- name: Upload to Google Drive
uses: satackey/action-google-drive@v1
with:
skicka-tokencache-json: ${{ secrets.SKICKA_TOKENCACHE_JSON }}
upload-from: ./
upload-to: /path/to/upload
# 回避手順を取った場合は以下の2つも必須
google-client-id: ${{ secrets.SKICKA_CLIENT_ID }}
google-client-secret: ${{ secrets.SKICKA_CLIENT_SECRET }}
完成
無事にアップロード完了しました。Slack に通知する
アップロードできたら、今度はアップロード通知が欲しくなりました。そこで Slack 通知にも対応しておきました。
Post Slack messages · Actions · GitHub Marketplace
中みたら curl で API 叩いているだけだったので、正直 Actions 使う必要ないなーと思いつつも、これを使うことにしました。
Slack bot 作成
まずは Slack のボットを作成します。
1. Slack API で App を作成する
2. サイドバーの「OAuth & Permissions」のリンクを開きます。
(「App Home」の「Bot Token Added」のところにもリンクがあります)
3. 「Scopes」に chat:write 権限を追加
4. ワークスペースに Bot をインストールします。
5. 「Bot User OAuth Access Token」にトークンが表示されます。
Secrets 登録
トークンを発行できたら、続いて GitHub のリポジトリ設定から Secrets にトークンを追加します。
名前は「SLACK_BOT_TOKEN」としました。
Slack notification step
最後に、GitHub Actions のワークフローに以下のステップを追加します。
- name: Notify slack
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
uses: pullreminders/slack-action@master
with:
args: '{\"channel\":\"CSYR0PEHW\",\"text\":\"Upload new pdf!!\"}'
最後に
技術書典にサークル参加される皆さん。準備はバッチシでしょうか?私はダメです。。。
がんばります。
2020年1月20日月曜日
[技術書典8] GitHub Actions で Re:VIEW Starter の PDF を作成する
さて、今週も(多少なりとも)進捗がありましたので、ご報告させていただきます。
今週の成果は、「PDF 出力までを CI で回すようにした」です。
いや、本書いてないやないかーい!
と言いたいところですが、CI はとても大事です。
だって、CI の本を書くのに CI してないなんてダメでしょ。
はい。前置きはこれくらいにして・・
今回は Re:VIEW Starter から PDF を出力して成果物として保存するまでをやります。
Git の構成
さて、CI 対応をしていくその前に Git 構成を考えます。ここまでは private repository でやってきましたが、private でも無料で使えるサービスとなると限られてくるので、public にしたいと思います。
(どのみちできる限りは公開したいと思っているので、public にするのは問題なし)
ただ、書きかけの本の内容は private にしたいですし、、、
少なくともイベント当日までは、本の内容がすべて読めるという状態にはしたくない。。。
そこで、Re:VIEW Starter のコンテンツディレクトリを private な repository の submodule としました。
(右画像参照)
ci-dex ディレクトリが Re:VIEW Starter から取得したプロジェクトです。ci-dex/contents ディレクトリに本の内容を書いていくわけですが、そこを submodule にしています。
public repository の Re:VIEW Starter プロジェクト以外には、本の中身以外のコンテンツを置いていく予定です。(宣伝用とか)
CI サービスの選択
PDF の出力には Re:VIEW 2.5 の docker image を使うので、だいたいどの CI でも問題なさそうです。次に出力した PDF を成果物として保存したいですが、これもだいたいどれでも問題ないと思います。
一番問題になってくるのは、private repository のチェックアウトです。
結論としては「GitHub Actions」を選びました。
リポジトリが GitHub なので CI も GitHub Actions にしておけば private の扱いも簡単だろうという安直な理由で選びました。
(実際には、シークレット環境変数があれば別にどれでも問題ないと思いますし、たいして手間は変わらない気もします・・)
というわけで、もしみなさんが CI を回すのであれば以下を満たしていればよく、お好きなサービスを選んでいただければいいと思います。
* Docker 使える
* Artifact ある
* シークレット環境変数使える
GitHub Actions で Re:VIEW Starter の CI
作成したワークフローはこちらになります。on: [push]
name: GitHub Actions
jobs:
review:
runs-on: ubuntu-latest
# container:
# image: docker://kauplan/review2.5
steps:
- uses: actions/checkout@v2
- name: Checkout submodules
uses: actions/checkout@v2
with:
repository: srz-zumix/ci-dex-review-contents
token: ${{ secrets.GitHub_PAT }}
path: ci-dex/contents
- uses: docker://kauplan/review2.5
with:
entrypoint: bash
args: -c "cd ci-dex; rake pdf"
- uses: actions/upload-artifact@v1
with:
name: ci-dex
path: ci-dex/ci-dex.pdf
ポイントは「Checkout submodules」です。ここで private repository をチェックアウトしてます。
やり方は checkout action のドキュメントのままです。
https://github.com/actions/checkout#checkout-multiple-repos-private
"GitHub_PAT" はパーソナルアクセストークンで、
「Settings」 >「Developer settings」 > 「Personal access tokens」で作成します。
private repository のチェックアウトがしたいので、 「repo」 のスコープにチェックを入れてください。
作成したらトークンをコピーしておきましょう。
つづいて、CI を回したいリポジトリの「Settings」を開きます。
「Secrets」があるので、そこに作成したトークンを追加してください。
名前は "GitHub_PAT" で保存します。(別名にする場合は yaml のところも修正してください。)
これで準備完了です。
ワークフローが実行されると、PDF が出来上がってきます!!
最後に
これが出来上がってきた PDF です。完全に Markdown 脳になっていました・・ Re:VIEW 記法にも慣れていかないとダメですね。
あと、成果物は今 public access になっていると思うので、保存先を private な場所にする必要もありそうです。
本の中身は空っぽな状態だからまだ見られてしまっても問題ないので、そこは執筆進めつつ対応したいと思います。
では。
2020年1月15日水曜日
[技術書典8] Re:VIEW Starter で執筆を開始しました
ともあれ、本のとてもとても大雑把な目次はできたので、本にするための作業を始めようと思います。
タイトルの通り Re:VIEW Starter を使って執筆をすることにしました。
なぜ Re:VIEW Starter なの?
なんとなくです。とりあえず、Re:VIEW で始めたらええよという話は聞いていたのですが、この記事「技術系同人誌を書く人の味方「Re:VIEW Starter」の紹介 - Qiita」を読んでなんか良さそうな感じだったので。
まぁ、でも使う前に疑問は解決しておきたいので、ハッシュタグつけてツイートしたら回答いただけました。
Re:VIEW Starter (Re:VIEW 2.5) vs Re:VIEW 4.0
Re:VIEW Starter を始めようとすると、まず目につくのが以下の注意文。Re:VIEW 3.0 はサポートしていません(2.x との互換性がないため)。ご注意ください。
Re:VIEW の方を確認したところ、2020/1/10 現在は version 4.0 まで更新されているようでした。
Re:VIEW Starter を使う場合、Re:VIEW 3.0 以降の更新の恩恵を受けられないので、デメリットとならないかが気になりました。
また、Re:VIEW の方で review update コマンドで旧バージョンからのアップグレードができるようになっているようだったので、
Re:VIEW Starter with Re:VIEW 4.0 環境でも使える?という疑問がありました。
いえ、なしです。— カウプラン機関極東支部@技術書典8新刊「Pythonではじめる黒魔術入門」 (@_kauplan) January 9, 2020
Re:VIEW StarterはRe:VIEW 2.5に多くの改造を施したものなので、バージョン3や4へ変更すると動作しません。
またRe:VIEWの3や4の新機能でめぼしいものはないので、2.5のままで安心して使えます。
というわけで、Re:VIEW Starter を採用することにしました。
始める
では、「プロジェクト作成を始める」から作成を開始!まずはサークル名(もしくは著者名)を入力します。
自分の場合、ぼっちなのでどっちでもどっちでも良さそうですが、とりあえずサークル名を入れました。
(あとで直す場合は config.yml の「aut:」を編集すれば ok みたいなので)
続いて、本のタイトルを入力します。
まだ決めてなかったですので、とりあえず埋めます。
(あとで直す場合は config.yml の「title:」を編集すれば ok )
つぎに本のサイズを決めます。A5 か B5 か。
わかりやすい説明が書かれているのでイメージが付きやすいと思います。アドバイスも参考になります。
今のところどっちでもいいかなーという感じだったので、B5 にしておきます。
(あとで直す場合は config.yml の「texdocumentclass:」を編集すれば ok 。以降も後で設定は変更できるみたいなので、気軽に初期設定を済ませてしまいましょう)
次はフォントサイズと余白。
とりあえず、オススメの設定にしておく。
次はページの設定。
目次は左でもいいやーと思ったので、「章は右ページ始まりにし、目次は左右どちらからでもよい」を選択。(本っぽくなってきましたね)
つづいて章・節・項の見た目を設定します。
デフォルトは、章の行数を2行にだけ変えました。
項のクローバーも別の文字に変えたいなと思ったが、初期設定では変更できそうになかったので、のちのち変えたいと思います(調べてないけどできると思っている)
次は、コードブロック・ターミナル用のフォントフェイスを決めます。
「'」と「`」の違いが分かりづらいのは、自分が書く本の場合困ると思ったので「inconsolata」にしました。
コードブロックの見た目はデフォルトのままにしました。
その他のオプションは、「原稿ファイルを「contents」ディレクトリにまとめる 」を有効にしました。
めちゃくちゃたくさん書く予定はないけど、まとまっていたほうが好みなので。
最後に、もろもろ埋めます。(まだ未定なものがありますが適当に埋めました。あとで変えられますし)
これで完成!!
プロジェクトをダウンロードします。
コンパイルする
ビルド用の Re:VIEW 2.5 の Docker イメージが用意されているので、それを使ってコンパイルしました。手順どおりすれば問題なくコンパイルできると思います。
(このへんは CI に組み込めそうなので、来週はそれ系の記事を書こうかな・・)
というわけで、ここまで躓くことなくできました!!
まとめ
正直、本を書くのは初めてなので、どれが良いとか悪いとかわからないです。なので、使い始めたけど自分とは合わなかったから別のものに変える可能性もあります。
まずは、中身が大事ですからね。
というわけで、頑張って内容を埋めるぞー
2020年1月8日水曜日
Happy 2020!
今年もよろしくお願いいたします。
さて、2020年。いよいよオリンピックイヤーとなりましたね。
私としては、オリンピックも気になるところですが、なんといっても今年は技術書典に初参加の年です!
東京来る前から本を書いてみたいと思っており、東京来てイベントなどに参加しやすい環境になったものの、行動に至らずな感じで2年経ってしまいました。
が、ようやく昨年決心して応募、今不安にかられている。。そんな新年でございます。
執筆状況ですが、まだ皆様にお見せできるものはありませんが、
一応・・・始めてはいます。。。(本を書くための調べごとに熱中しているのは内緒・・
技術書典8までの間はしばらく技術書典関係の投稿が増えると思います。(執筆環境どうしたとか、書けることは書いていきたい)
とりあえず、今月中になんとなく一通り書けたらいいなーと思っておりますので、見守っていただければと思います。
それでは。






