́)ゞAdventカレンダーとしては前回、工場で使っているIoTツールの話をしました。kazuph.hateblo.jp工場では作業をできるだけ隠蔽・自動化し工程を進めているのですが、工場でやっていることを社内でもやりたい場合、もしくはもっと柔軟に作業を行いたい場合があります。工場に依頼せずに社内で行っている作業もあります。今回はそんな現場で使われている数ある社内ツールを何回かにわけていくつか紹介して期待と思います。́)これは工場で使っているファームウェアの自動書込みと自動検査を行う「書込検査君」の社内版です。↓工場で使ってるツールはこんな感じでブラウザで動作(裏ではGolangやshell)するGUIツールです。社内ツールとしては主にはCLIで操作します。※名前は気にしないでくださいで、工場では流れ作業でどんどん次のファームウェアの書込を行っていくのですが、社内では場合によっては任意のID、バージョン、Production用やStaging用、Dev用なのかなど、柔軟にファームウェアの書込を行う必要があります。社内でそれをやるのに、一々開発者がStagingサーバーのDBを覗いてIDを確認してソースコードを変更するのはめんどうです。そこで工場用のツールをつくる前から任意のファームウェアの書込みができるツールを僕のMacでも動作するように開発していました。構成は簡単で、実行可能なshellを./bin以下に配置しておいて、それをGolangでラップしてWebAPIを叩いたり、次の別のshellを叩いたりするだけです。工場用Webアプリケーションとは一応別レポジトリで管理しておいて、./binへのシンボリックリンクを貼っている感じで、ソースが分散しないようにしています。使っているものとしては、bin/kakerun.sh最もベースとなるbashスクリプト。基本的には、このスクリプトにオプションを渡せば、どんなバリエーションのファームウェアの書込みが可能になる。ソースコードからのビルドはせずに、バイナリ置換とJ-Linkによるファームウェアの書込み(流し込み、チップへのダウンロード)を行うだけ。J-Linkを使った書込み部分はexpectというインフラ秘伝技術を使いました。bin/hex_replacer.rbkakerun.shの中で呼ぶrubyスクリプト。intelhex形式の置換を担当する。こちらもオプションで指定することで任意のバイナリ置換が可能。ちなみにbin形式の置換は、kakerun.shの中のperlでやっている。この辺は、記事を書くほどではないかもですが、誰かが喜ぶかもなので、どこかにスニペット程度は上げて起きたいと思います。akerun-firmware-kakeelGolangの実行バイナリ。main.goルートとなるGoスクリプト。IDを受け取って、管理用APIのメソッドを叩いて、書込み用のメソッドを叩いて終了というシンプルな構成。kakerun_wrapper.gokakerun.shを実行するためのメソッドを置いてる。APIから取得した情報を使ってオプションを埋めて実行、結果の取得を行う。書込みに長い時間が必要な場合あるので、そんむーさんのtimeoutというGoのライブラリを使わせてもらいました。tio.Run()tatakun.goWebAPIを叩くためのメソッドを置いてる。goreqがちょっと便利だった。...}以上こんな感じでshellとGolangを連携させていました。これを使うことで、コマンドを一発叩くだけで、任意のファームウェアの書込みができるようになって、大変便利でした。Golangで書いたけど、Windowsさんでの実行を想定せず。bashとかrubyにも依存しているので、すいません。うちのソフトウェアエンジニアは全員Macなので問題はないんですけどね👀おわりに社内では様々な人が様々な業務をこなしており、エンジニアから事務のお姉さん的な人含めて業務の効率化は必須です。Webエンジニアがやったらきっともっと簡単ですぐ終わるだろうなぁって思ったことが、結構手作業のまま行われているケースもあります。聖なる夜に...2017-12-04組込みCテストフレームワークUnityを導入してテストコード生産性をUp回路設計・ファーム開発担当のす〜(@ksksue)です。(2)はてなブログをはじめよう!photosynth-incさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。