IT系でないエンジニアの作業環境（Jupyter notebook, Python, ImageMagick, TeX そして MS-Word）

## 1. はじめに
私は土木構造物の設計技術者であり，たまに土木構造物関係の調査なども行っています．そんな私が，日常の仕事を，どのようなツールを使って行っているかを紹介してみたいと思います．ここで具体的なコード事例は紹介していませんが，ツール活用の方法論としては読者の参考になる部分もあるかもしれません．

## 2. 作業環境概要
Jupyter notebook 画面のスクリーンショットの一例を載せました．MS-Word の白い画面を見ているとイライラしてくるのに対し，黒画面はやる気がでます．Markdown で設計方法などを書き込み（写真上），Python プログラムをその下に作成していきます（写真下）．
Jupyter notebook の設定は下の記事に紹介しています．

[Mac における Jupyter notebook の設定](https://qiita.com/damyarou/items/5c319f5def57c6e36a37)

<img width="1280" alt="fig_eq.png" src="https://qiita-image-store.s3.amazonaws.com/0/129300/3d2ee9de-8fb2-dc3d-4692-351d3a90996c.png">

<img width="1280" alt="fig_code.png" src="https://qiita-image-store.s3.amazonaws.com/0/129300/7850f35e-bcb4-6242-71ea-914b3f66b241.png">


### 2.1  使用マシン
普段は Windows 7 (64bit)ノートパソコンです。CPU: Intel Core i5, Memory: 8GB 以上のスペックであれば、ここで行っている作業は、そこそこできます。


### 2.2 仕事の内容
ある構造物を設計する時の標準的な流れと使用ソフトを以下に示します．

|項目            |使用ソフトなど                        |
|:---------------|:-------------------------------------|
|業務フロー作成  |Jupyter notebook                     |
|設計計算        |Jupyter notebook, Python 3 |
|報告書原案作成  |TeX, ImageMagick, GMT                 |
|最終報告書作成  |MS-Word (お客さん提出用)              |
|設計図作成      |AutoCAD (専門のドラフトマンが製図)    |

### 2.3  ツールの使い方概要と使う理由

|プログラム|使い方|
|:---------|:-----|
|Jupyter notebook | Markdownドキュメントの作成・保存<br>Pythonプログラムの作成・実行・保存<br>シェルスクリプトの作成・実行・保存 (ImageMagick, TeX など)|
|Python | 設計計算プログラム（図化含む）の作成・実行<br>TeXファイルの作成・コンパイル・pdf化プログラムの作成．実行|
|TeX | 報告書原案作成 |
|ImageMagick | 画像の余白調整・リサイズ・結合などの処理 |
|GMT | 地図関係・３次元グラフの出力 |
|WS-Word | 客先提出用清書 |
|AutoCAD | 私は使えない（専門のドラフトマンが製図） |
|Atom, CotEditor | Mac 側テキストエディタ |
|gPad | Windows 側テキストエディタ |

#### 2.3.1 Jupyter notebookを使う理由

+ Markdown ドキュメント，Python プログラム，シェルスクリプトなどを１ファイルに保存でき，仕事の手順管理に便利だから．

#### 2.3.2 Pythonを使う理由
##### 好きなところ

+ 計算処理部分をコンパクトに書けるから．
+ numpy，scipy などのライブラリが充実しており，これらに備わっている機能を自前で準備する必要が無いから
+ matplotlib により作図まで１プログラムで処理できて便利だから

##### 今一なところ

+ 入出力部のコードがごちゃごちゃしすぎてしまうところ（プログラミングの腕が悪いから？）
+ matplotlib による図化は自由度がある反面，コードが長くなりがち．図化ソフトとしては GMT (Generic Mapping Tools) のほうがコンパクトな記述でやりたいことができる．

#### 2.3.3 ImageMagickを使う理由

+ 画像の処理に便利だから．
+ Python でもできるが，Python は画像を作るところまで．出来上がった画像の余白調整・リサイズ・結合などの処理は，画像処理専用ソフトである ImageMagick のほうが簡単にできる．

#### 2.3.4 GMT（Generic Mapping Tools）を使う理由

+ 地図関係・３次元グラフの出力はこれに限る．ただし GMT は ps あるいは eps 出力しかできないので，ImageMagick との併用が必要．（TeX しか使わないなら ImageMagick はなくてもなんとかなる）
+ 地図関係は，Python-matplotlib でもできないことはないが，basemap のインストール方法や使い方がよくわからない．そもそも GMT でできるので，そこで苦労はしない．
+ ３次元グラフも，Python-matplotlib でできるが，出来栄えがかっこよくないのと，ｘ−ｙ−ｚ同スケールの図が書けない？（書き方がわからない）ので，使わない．GMT でカッコイイ図が作れる．

#### 2.3.5 TeXを使う理由

+ 文書の構成を作る・見るのには最適
+ input 命令で独立したファイルを読み込んでコンパイルできるため，部分チェック，全体構成チェック，構成の入れ替えが自由にできる．
+ Word だとクリップボードに大きな記憶をさせて移動させようとすると，フリーズしたり，前後の部分がどこかに行ってしまったり，信用ならない．
+ 数式入力が簡単（すでに TeX を使えるので Word によるパズルのような数式入力より早い）
+ 仕上がりもかっこいい

#### 2.3.6 MS-Wordを使う理由

+ 仕様だから（お客さんとの約束）
+ みんながある程度使えるから（私もある程度使える程度です）．


## 3. ツールの使い方の思想説明

### 3.1 業務フロー作成段階
ある設計をする時，はじめに大まかな計画を立て，Jupyter notebook に Markdown でメモしていきます．
これは，設計報告書の一部にもなるので，作業の途中でも必要に応じて修正していきます．


### 3.2 設計計算段階
#### 3.2.1 Excelは使わずプログラム言語を使う
主に行っている計算は，構造物の安定計算，構造計算，水理計算です．これらは，検討するケース数が多かったり，収束計算を伴うものも結構あるので，Python でプログラムを組んで行っています．私の場合，設計計算において Excel を使うことはめったにありません．Excel は「便利だとは思うが気分的に嫌いだ」というのが使わないメインの理由ですが，具体的に感じていることは，

+ 中を見ないと何をやっているのかわからないし，セルを参照するためあちこちに飛ぶので理解に時間がかかる（簡単なものは直感的に分かるが）
+ Excel のグラフは見た目が安っぽいので使う気にならない
+ 理論の修正が必要となった時，修正するのが面倒（特に多くのケースの計算を行うときなど）

などなど，色々な言い分はあります．

これに対し，プログラム（最近は Python オンリー）を使う理由としては，

+ 複雑なことも無理なくできる
+ 修正が楽
+ 多くのケースを流すときも簡単
+ 結果もファイルに落としてグラフ化するなどあとでの応用にも便利
+ プログラムはテキストファイルなので保存に容量も食わないし，Mac でも Linux でも Windows でも自由に使いまわせる．

と，自分にとっては不利な要素はありません．たまたまプログラム言語を使えるからなのかもしれませんが．（最近の若い人たちは，技術系でもプログラム言語は使えない人たちが多いみたいです．そのかわり Excel で相当複雑なことまでやるらしい．）

#### 3.2.2 設計計算情報のテキスト化
またプログラム言語は Python を使っているので，Python プログラムと Markdown によるドキュメント，色々な処理を行うシェルスクリプトなどを同一ファイルに収納できる Jupyter notebook も大変重宝しています．プログラムを作るときは，それなりに複雑な式を用いたり収束計算を行う場合が多いので，計算式や計算手順をしっかり確認しておく必要があります．この時，Jyoyter notebook に Markdown で以下のことをメモっておくようにします．

+ 計算式（TeX記法）
+ 計算手順
+ 計算ケースや入力する材料物性値など

この部分も後に報告書に載せることになるため，はじめからケチらず記載しておきますし，必要に応じて途中で加筆・修正していきます．Markdown で書いておくと，数式も含め，TeX 出力したときのイメージと概ね同じ雰囲気にできるので，そこも気に入っています．

#### 3.2.3 プログラム作成
あとは同じファイルの中に動作を確認しながらプログラムを作っていきます．グラフ化が必要な場合は matplotlib を用いたグラフ作成部分もプログラムに組み込んでおきます．プログラムが長くなって見通しが悪い場合などは，プログラムを，

+ a. 計算し結果をファイルに書き込むま部分
+ b. ファイルを読み込みグラフ化用にデータを加工する部分
+ c. データを読み込んでグラフ化する部分

に分割してやります．

#### 3.2.4 計算出力（数表）の扱い
ファイル出力は，あとでの利用がグラフ作成のみであれば数値を羅列しておけばいいのですが，報告書に添付する可能性がある場合には，面倒ですが，そのままテキストとして貼り付けられるよう，書式にも気を配っておきます．表の扱いですが，TeX を使う場合は，計算結果出力の段階で，＆マークやバックスラッシュをいれて TeX の表として使えるファイルを Python で出力し，TeX 文書に挿入することができます．しかし，Word 仕上げにしなければならない場合，データを csv ファイル出力し Word に貼り付けて表にするという手もありますが，罫線がうるさく美しくないので，等幅フォントのテキストの表をそのままコピー＆ペーストするか，画像化して貼り付けるようにしています．

また，報告書に貼り付ける画像は，ImageMagick を用いて，余白調整，リサイズなどをある程度行っておきます．

ここでのポイントは，計算終了時点で，結果のグラフ（画像），結果の数表（テキストもしくは画像），報告書のネタとなる文書（数式含む）が出来上がっていることです．

### 3.3 報告書原案作成段階
#### 3.3.1 TeXでの報告書原案作成
我々の業務では多くの場合，成果品は MS-Word でレポートを作成し，ソフトコピーも含めてお客さんに提出するという仕様になっています．

しかしながら，私の場合，この段階ではまだ MS-Word は登場しません．TeX の出番です．この段階で，TeX を用いて，ドキュメントの部分，グラフの部分，数表の部分，添付資料も含めて pdf 化した報告書一式を作ってしまいます．これは，自分での内容チェックおよび社内の関係者への回覧にも使えます．

#### 3.3.2 画像の扱い（Word化を踏まえた処理）
ここで，画像の貼り付けに関してですが，TeX であれば，画像はかなり自由に貼り付けられますし，枚数が増えても特に気になりません．読み込むファイル名を変えた数行をコピー＆ペーストで増やすだけですから．またページ内における画像の大きさも，TeX 文書内で指定できるため，同じ大きさにしたい画像は指定通りの大きさ・位置に配置できて気持ちがいい．しかし Word に貼り付ける段階になると，手動で一枚ずつ貼り付けていく必要があるので，画像の枚数はできるだけ減らしたいものです．このため，１ページに貼り付けたい同種の画像が 10 枚ある場合，図中にサブタイトルを入れておき，ImageMagick で結合して１枚の画像にしてしまいます．そうすることより，Word で１ページに 10 枚の画像を貼り付ける手間が，１回で済むことになります．また Word に図画像を貼り付ける場合，同じ大きさに揃えるため表を作ってその中に貼り付けるようにしても，一枚一枚の大きさが微妙に違ってしまい，とても気持ちが悪い．その点，同じ大きさにしたい画像を結合して１枚にすれば，手数に加え，微妙に図の大きさが違う気持ち悪さから開放されます．

#### 3.3.3 TeXで原案作成する利点（画像の差し替えが簡単，Markdownが活用できる）
そうこう出来上がったものを眺めていると，計算条件を変えてみようと自分で思いついたり，関係者からのコメントで，色々な注文がついてきます．
もし MS-Word で原案を作成した後，計算条件の変更があったらどうしましょう．TeX ならば，同じファイル名で図表を作成すれば，再コンパイルすることにより，自動的に図表が差し替わった報告書案が完成します．ところが Word の場合はせっかく貼り付けた図表（画像）をすべて手動で貼り付け直さなければなりません．画像が１枚や２枚ならいいですが，これが 20 枚とか 30 枚となってくると，変更するために使う時間はばかになりませんし，これを何回も繰り返すとなると，私はやってられません．（中にはそういうことに時間を使って仕事をした気になっている人もいるようですが，私ならさっさと終わらせて飲みに行きます）この無駄な労力と時間を使わないためには，TeX で報告書原案を作ることはとても合理的だと思うし，納得感もあります．

また，計算理論などは，Markdown に TeX 記法で書き込んでありますから，TeX に落とすときも楽です．

更に，TeX はテキストで原ファイルを作り，それをコンパイルするという特性上，TeX ファイルを Python プログラムで吐き出させ，同じプログラム上で pdf 作成まで実行することも容易にできます（私はよくこの手を使っています）．

できあがったものを，そのまま成果にしたいところですが，お客さんと約束した仕様があるので，最後の段階で MS-Word が登場するわけです．


### 3.4 最終報告書作成段階
#### 3.4.1 Word化しなければならない
最終段階で，やっと MS-Word の登場です．私の中で，Word にする理由は２つあります．

+ 仕様だから．お客さんとの約束は守らなければなりません．
+ みんながいじれるから．自分では大丈夫と思っていても，実力ある人が見ると，お客さん提出用成果品として修正が必要な場合もままあり，それらをスピーディーに修正する．

Word 化するときの手順は以下の通り．TeX の原ファイルはテキストファイルなので，多少の手間はかかりますが，数時間の話です．

+ TeX ファイルをテキストエディタで開き，全文を Word にコピー＆ペースト
+ \\section や \\subsection を「見出し１」や「見出し２」に変える．もちろん手動で．
+ 図表（画像）を挿入する．「挿入」-「図」でフォルダからの挿入を根気よくやる
+ 図表に対し「参考資料」-「図番号の挿入」で図番号の挿入，「参考資料」-「相互参照」で本文中に図表番号をリンクさせる
+ 数式を挿入．TeX の数式の部分を，Word の「挿入」-「数式」で根気よくプチプチボタンを押しながら Word の数式に直していく
+ 目次を自動作成して完了

#### 3.4.2 Word化にも自分なりに意味を与えよう（成果品文書チェックの時間）
これを読んで，９９％の人は，「そんなことせずに最初から Word で作ればいいのに」と思うと思います，しかし，私は，Word 化しながらミスのチェックができる，というか，強制的にチェックする機会が与えられる，という利点があると思っています．というのも，TeX で pdf 化したものを見ると，そこで完成！という頭になってしまい，それ以降自己チェックするのは以外に億劫です．しかし Word に直すという作業において，必然的に読みながら内容チェックを行うことになり，ここでスペルミスや表題のつけ違いなどに気がつくこともあるわけです．そういう意味では，お客さんに提出する前の自分なりの最終チェックになり，無駄だとは思わないようにしています．


### 3.5 設計図作成段階（ドラフトマンまかせ）
我々の事務所には，幸いにして CAD 専門のスタッフがいるので，設計計算に基づいて，グラフ用紙に手書きで素図を作成（もちろん三角定規を使い縮尺に合わせた寸法通りに書きます），ドラフトマンに渡せば，あとはやってくれます．仕上がった図面をチェックし，修正指示を出して完成まで持っていく．



## 4. まとめ：自分なりの合理化手法

### 4.1 Jupyter notebookの活用
#### 4.1.1 やること

+ 設計計算式，計算手順，入力物性値，計算ケースなど，報告書のネタになるものは，Markdown のドキュメントとして Jupyter notebook に書き込む．
+ Markdown のドキュメントをもとに Python でプログラムを作成し，Jupyter notebook 上で計算から図化まで実行
+ 報告書に貼り付ける画像は，Imagemagick を使い余白の削除，リサイズなど，ある程度の処理をしておく．Imagemagick コマンドは Jupyter notebook 上で，シェルスクリプトで実行させれば良い．

#### 4.1.2 効果

+ これにより，一つのファイルにドキュメント・プログラム双方が格納され，見直し時にロスが少ない（あれはどこにいったっけ？ということは少なくとも無い）．
+ 報告書作成のネタも，設計計算完了と同時に揃えることができる．

### 4.2 報告書原案作成時におけるTeXの活用
#### 4.2.1 やること

+ Markdown のドキュメントを TeX に変換する．この作業は，コピー＆ペーストと構成を挿入していく作業がメインなので比較的ラク．
+ 多くの図表を挿入する必要があるときは，図表出力用の TeX 文書を作成し pdf 化するまでのプログラムを Python で作ってしまう．ファイル名を変えながら for 文を回すだけなので，プログラムも複雑ではないし，必要なら本文もプログラム上から挿入する．
+ Word への貼付け作業で面倒になりそうな図表は，ImageMagick を用いて画像化し結合するなどして枚数を減らし，Word への画像貼り付け手間を極力省くよう工夫する．

#### 4.2.2 効果

+ 計算条件の変更などに伴う図表の差し替えに手間いらずである．
+ 仮の姿ではあるが，報告書の完成版をイメージできる．

### 4.3 Word化
#### 4.3.1 やること

+ TeX テキストから Word への変換は手動で行うが，自己チェックの機会としてとらえ，めんどうであるがこなす．

#### 4.3.2 効果

+ 報告書の質の維持（記載ミスなどの低減）
+ みんながいじれる

以　上