2020年1月28日火曜日

Visual Studio のプロジェクト設定は共通部分を前に書こう

Visual Studio で複数の構成を扱っている場合がほとんどだと思います。
Debug/Release、Win32/x64 などなど。
MD/MT とかもありますね。dll/static lib とかもあるか。

それぞれ、インクルードパスだったり、プリプロセッサ定義だったりを書くと思いますが、私からのお願いです。

「各構成で共通な設定を先頭に書いてください」
「専用の設定を末尾に書いてください」


なぜか
Visual Studio で設定を編集する場合に、個々の構成に対して編集ができますが、
すべて・もしくは任意の複数構成で編集することもできるからです
複数構成の編集をする場合、以下のように共通部分がそれぞれ表示されます。
差分があると「<別のオプション>」のように表示されます。

例:
Platformプリプロセッサの定義
Win32WIN32;_DEBUG;_LIB;
x64WIN64;WIN32;_DEBUG;_LIB;

Win32

x64

すべてのプラットフォーム


わかりますよね?
差分が先頭にあると、すべて「<別のオプション>」になってしまうのです


共通部分を先頭に書く
共通部分を先頭にまとめておけば、複数構成で編集・閲覧するときに圧倒的に楽です!!
先程の例を修正してみましょう。

Platformプリプロセッサの定義
Win32WIN32;_DEBUG;_LIB;
x64WIN32;_DEBUG;_LIB;WIN64;

Win32 はそのまま、x64 の WIN64 を末尾に移動しました。

Win32

x64

すべてのプラットフォーム


いかがでしょうか?
差分を末尾に移動するだけで、こんなにも見やすくなりました。


もちろん、この状態で編集しても差分部分が壊れることはありません。


こちらは Visual Studio 2015 で試したものです。最新のバージョンでも同様です。
以上、私からのお願いでした。


P.S.
技術書典の進捗報告予定でしたが、カッとなって書いた。
技術書典の方は、執筆しつつも、今週はサークルカットを準備するのにほとんど時間を使ってました・・

では、また来週。

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 2.5 のみをサポートしています。
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 環境でも使える?という疑問がありました。



というわけで、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までの間はしばらく技術書典関係の投稿が増えると思います。(執筆環境どうしたとか、書けることは書いていきたい)
とりあえず、今月中になんとなく一通り書けたらいいなーと思っておりますので、見守っていただければと思います。
それでは。