エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

業務を効率化するためにツールを自作する ~ Emacs と時々 Electron ~

この記事はエムスリー Advent Calendar 2019 の22日目の記事です。

こんにちは。エムスリーエンジニアリンググループ、新卒2年目の青木です。 現在はクラウド電子カルテ「エムスリーデジカル 」でソフトウェアエンジニア兼チームSREをやったり、別チームで Windows アプリを作ったり CI 回したりしてます。

今回の記事では、業務の効率をあげるために今年作った小さなツールたちを紹介します(主にEmacsなのはご容赦を)。

複雑な CSV(見出し無し)の扱いを効率化

> jp-medical-recept-reader.el

電子カルテ(特にレセコンと呼ばれる会計機能)を開発していると「レセプト電算ファイル」という、医療機関の診療情報を記しているファイルを頻繁に扱います。 .UKE というカンマ区切りのファイルで、一行ごとに患者や保険の様々な情報を含んでいます

例えば、以下はあるレセプト電算ファイルの一部で、基金花子さんという患者の情報(REで始まる行)と、保険の情報(HOで始まる行)になります。

RE,100,1115,43006,基金 花子,2,40507022,,4300612,,,,,A123-456,,,,,,,,10,,,,,,,,,,,,,,,キキンハナコ,001
HO,01131234,12345678,1234567,30,100000,,90,57600,,,44400,1,20, 

このカンマ区切りの情報だけから、各項目が何を表しているかを読み取るのは非常に難しいです。普段は「電子レセプトの作成手引き」と照らし合わせながら読解していますが、かなり手間がかかり、開発の効率が悪いです。

そこで、エディタ上で各項目の意味を確認できるツールを作って手間を減らしてみました。 各行にカーソルを合わせてコマンドを打つことで、その行の情報をモーダル上に表示してくれます。

github.com

単調なコピー作業をワンアクションで効率化

> cool-copy.el

エディタ上である単語をコピーして、別の行に貼り付けて....という操作は1日に数十回は行います。しかし、一々カーソル移動して単語を選択するのはタイピングの無駄です。 そこで、カーソル下の単語をワンアクションでコピーできるツールを作りました。通常のコピーコマンドをオーバーライドする形で使います。

(global-set-key [YOUR KEY] 'cool-copy)

以前は m3-digikar という単語をコピーしたければカーソル移動してコピーしていましたが、このおかげで Cmd + c だけでコピーできるようになりました!

github.com

コードリーディングを Virtual なコメントで効率化

> phantom-inline-comment.el

コードリードをしていると、ある行に自分用メモを取りたい時が多々あります。 例えば、複雑なコードを読むときに「このメソッドは validation 以外には使われていない」などちょっとしたメモだったり、コードを書いている時の「TODO: あとで直す」のようなコメントだったりです。

しかし、コメントとして書くのもいいですが、Git に差分として検知されてしまうと commit から一々外す必要があったりとそこそこ面倒です。

そこで、差分として検知されないメモをコード上に残せるツールを作りました。 画像のように、メモ用の buffer がポップアップして、残したメモはコード上に可視化され続けます。

github.com

カーソル移動を履歴管理で効率化

> point-history.el

コードを書いていたり読んだりしていると、少し前までのカーソル位置に戻りたい瞬間があります。 point-undo.el のようなツールはすでに存在しましたが、戻れる位置を一覧表示できる機能はありませんでした。

そこで、過去のカーソル位置を一覧で表示して、その位置へ戻れる機能を追加したものを作りました。 これによって、コードリーディング中にカーソル位置が迷子になっても戻りたい位置へ戻ることができます。

github.com

Slack での並列コミュニケーションを効率化

開発と同様に、チームメンバとのコミュニケーションも重要な業務です。 弊社では Slack や GitLab を使ってコミュニケーションをとっていますが、もっと効率化や円滑化をしたかったのでツールを作ってみました。

> SlackDeck-proto

Slack を使っていると、別々の内容の議論が並行で走ることがあります。例えば複数チャンネルに所属したり、あるチャンネルで複数のトピックが話されたりなどです。

その際、チャンネルを一々切り替えたり、Thread を開いたりなどを一画面で行うと徐々に混乱したり、議論を追いきれなかったりします。 そこで、Slack をマルチカラムで表示させることができる Electron アプリを作ってみました。

TweetDeck のようにチャンネルをマルチカラムで表示することで、画面の一覧性を向上させました。 これによって、複数チャンネルやThreadを同時に閲覧できるようになりました。

github.com

GitLab での LGTM なコミュニケーションを効率化

> LGTM-Generator-from-Dropbox

f:id:blue0513:20191215165755j:plain

レビューして、その MR が問題ないようであれば「LGTM(Looks Good To Me)」とコメントするのが電子カルテチーム流でした。 最近は少し遊び心を加えて画像を投稿する文化も一部出てきたのですが、一々画像を選んで LGTM の文字を書き込んで.....は手間でした。

そこで、自分の Dropbox にある画像をランダムに選んで、LGTMの文字を色々な形式で書き加えるツールを作ってみました。 コマンドラインから叩けるので、かなり楽になってます。

github.com

おまけ

> mini-deck

TweetDeck を Electron で小さく表示するアプリも作ってみました。 最前面で表示されるので、画面の端に置いたりすると邪魔にならずに Twitter が鑑賞できます。

業務中の過度な使用にはご注意を。

github.com

We are hiring!!

エムスリーには技術が大好きなエンジニアや、社会の役に立つモノづくりをしたいエンジニアが集っています!
社会や医療に役立つプロダクトを一緒に作っていきませんか?! カジュアル面談でお待ちしております!

jobs.m3.com