晴耕雨読

working in the fields on fine days and reading books on rainy days

2020年度振り返り

2020年度に対する個人的な駄文です。一言でまとめると、今年度はWindowsの年でした。

社会人一年目の年でした。 学生時代はMacOSとLinuxで生活していたのですが、会社ではWindowsを使うので最初の頃はとにかく知識不足に苦労する日々と自宅と会社の複数OSで頭が混乱する日々が続いていました。 なぜLinuxメインの会社に就職しなかったのだと言われますが、最近のMicrosoftのWSLなどの取り組みを見て、Windowsもちょっと勉強してみたいなと思ったからです。 Windowsはほとんど使ってこなかったので、環境変数をどこで設定するかわからないだの、bashコマンドが使えないだの、いろいろ苦労していました。Excelの操作の仕方も一から勉強しました。

Windowsについてよくわからないことが多いのに、システムの全体像が把握できずに開発に時間がかかったりして、会社では実験する時間がなかったので、自宅のノートPC1台Ubuntuを潰してWindows10を入れなおし、さらに初任給で母艦としてそこそこスペックのあるWindowsPCを購入しました。 また、Raspberry PiのサーバにSambaを入れて、共有フォルダの挙動なども調べていました。 おかげで、共有フォルダの中にレポジトリを作れるという知見が得られました。 ちなみに、コードの半分以上は古のVSSというバージョン管理ツールで管理されているのですが、いろいろ破綻しているので、会社のPCにはがっつりカスタマイズしたGit Bashをいれて、VSSとは別に自環境でバージョン管理しています。

5月に配属された部署は3ヵ月お世話になり、8月からは同じ本部の別部署に異動となりました。 その業務ではハンディーターミナル (HT) を使うためにHT実装要員が必要で、私に白羽の矢が立ったのだと思います。 HT上で動作するプログラムはC++で書かれていて、まあおそらくC++で実装する人が必要なのはうちのグループだけだと思います。

今のグループで開発として使う言語は VB.NET、Java、C++ の3種類(正確には JavaScript もほんの少しだけあります)です。 .NET 3.5、Java7 など言語のバージョンが古い部分もありますが、長く稼働しているシステムというのはそういうものだと割り切っています。

ある時、取込みデータに対する前処理に、暫定対応でExcelマクロを使いたいという話が上がりました。 自宅WindowsPCを買うときにExcelとか必要ないだろうと思ってOfficeなしで購入していたのですが、この件でExcel VBAのマクロの挙動を確認・調査したくなったので、呪いの言葉を吐きながらExcel 2019の永続ライセンスを1万4000円くらいで買いました。 VBAマクロの本とかも用意しましたが、結局、私は実装の担当ではなくなりました。ちょっと残念でした。

会社での作業を一部自動化するために、Windows Batch、VBScript、PowerShell をそれなりに勉強しました。 Windows Batch はビルドしたdllやexeを収集・配置のために、 VBScript はExcel内の質問回答を抽出して正規化処理をして別サイトへ入力しやすくするために、 PowerShell は設計書(Excel)から内容を抽出して必要な設定ファイルを生成したり、 VSSから指定したファイル群を取得して適切に配置したり、 HT関連のサービスを再起動したりするのに使いました。 これらのコマンドは引継ぎ資料のどこかにこっそり入れておきたいと思います。

11月頃にはプライベートで、セキュリティキャンプの暗号解読ゼミにチューターとして参加しました。 詳細は「seccamp2020チュータ参加記」をご覧ください。 仕事しながら別の作業も集中して取り組むというのは結構難しいです。 いろいろ疲れたので40時間の残業予定に対して20時間未満しか残業しなかったら、複数のライン職に仕事実施内容の確認と口頭注意(のように聞こえた文言)を受けました。 が、チューターとして参加したことでキャンプ協議会からお金が支払われました。 具体的な金額は出せませんが、少なくとも会社での時間外40時間の残業代よりも多い額です。 ちょうどその頃、Windowsのリモートログインの機能を実験したかったのですが、 自宅にはWindows 10 Homeしかなかったので、全額でWindows 10 Proの端末を購入し、リモートログインができる自宅の簡易サーバとして稼働させることにしました。

そこで、学生時代に作成した翻訳ツールでRFCを翻訳したサイトがあるのですが、最近仕事が忙しくてなかなか更新できないので、翻訳作業を簡易サーバに定期実行させて毎日少しずつ翻訳してもらうようにしました。 環境としては簡易サーバにJenkinsを入れて、深夜と朝方にそれぞれ実行するように仕掛けてあります。 Jenkinsは直近数回の実行結果が天気でわかるので、晴れマークだと順調、雨マークだとネットワークの通信が悪かったのかな、という感じで見ていて可愛いです。

また、簡易サーバがWindows Proなので、Hyper-Vが使えるようになりました。 いままではVirtualBoxで仮想化していましたが、ホストOSが再起動するときにいろいろ面倒でした。 しかしHyper-Vを使うことで、PCがシャットダウンするときにスナップショットがとられて、 起動時にスナップショットから復元される便利な仕組みがあるので、長期運用にはHyper-Vの方が向いていると感じました。 現在 Hyper-V で CentOS が起動していて、いつでもSSHログインして技術検証ができる環境になっています。

1月、正月休みでマイナンバーカードとAPDUで通信して署名データを作成したり、OpenSSLで検証したりする技術検証をしました。詳細はこちらの記事をご覧ください。

2月、リモートで仕事をしていると突然メールが来て、あるシステムで開発者を集めるために会社に出社してほしいという内容でした。1週間程度でしたが Play Framework で Java や JavaScript などを書いていました。 久しぶりに Java8 を使うことができて、嬉しくて一部処理を Stream API を使って実装しました。 JavaScript はどのブラウザまでをサポートするか開発時に明示されなかったので、一応安全のためjQueryでがっつり書いたのですが、私の後に追加実装した人がjQueryに詳しくなかったために、自分の実装分は最後まで面倒を見ることになりました。

3月、人事部から、来年度から職場が変わってもいいか、セキュリティの仕事(研修出向)があるけどやりたいかと聞かれ、 特に断る理由もないので承諾しました。

まとめると、全体を通してWindowsの年でした。.NET Framework, Visual C++, MFC, Visual Studio, MSBuild, devenv, exe, dll, GAC, IIS, DCOM, ClickOnce, Excel VBA, Batch, VBScript, PowerShell, Hyper-V あたりは初めて見る・触る技術でいろいろ勉強になりました (Silverlight、お前も忘れてないぞ)。 会社の技術的には残念な部分が多く目立ちますが、セキュリティの道を歩くにしてもWindowsの知識は必要なので、いい勉強になりました。今では AutoHotkey と Keypirinha が使いやすくて、MacOSに戻れない体になってしまいました。

来年度はやることが一気に変わると思いますが、来年度も引き続き、面白そうなところに足を突っ込んでいきたいと思います。