秦 誠一郎
私の仕事道具の中で最も重要なピース(piece)、かつ、お客様の大事なピース(peace)を守るための道具であるMakdoをご紹介したいと思います。
Makdoは、MS Word形式のファイルをMarkdown記法を使って作成・編集するアプリで、私が一人で開発しています。 なお、MS Word形式のファイルの作成には"python-docx"を使い(ただし、独自に大幅拡張しています。)、エディタのGUIには"tkinter"を使っています。 また、Makdoは「MAKe DOcx files」及び「MArKDOwn」の略です。
MakdoでMS Word形式のファイルを開くと、自動でMarkdown形式の原稿に変換されて、独自開発のMarkdownエディタが起動し、編集できるようになります。 編集後に原稿を保存すると、自動でMS Word形式のファイルに変換されて保存されます。
私は、普段、弁護士をしています。 学生時代は理科系でしたが、卒業直前に法律に転向しましたので、ただのアマチュアプログラマです。
弁護士の仕事は裁判所に提出する書面の作成がかなりの部分を占めていて、MS Word形式のファイルで作成するのが事実上の標準になっています。 ところが、私はLinuxユーザであるため、MS Wordが使えません。 そこで、どうしても必要なときは古いWindowsパソコンを使うなどして、最近までなんとか仕事をしてきました。
今から約3年前のある日、この問題をPythonを使って解決できないかと思い、開発を始めたのがMakdoです。 Makdoには、日本の役所(裁判所、市役所等)に特化した機能も含め、私が「あったらいいな」と思う機能を全て実装しました。
開発の動機、開発の苦労話、実装した機能などを、初心者からプロまで幅広い層の方に聞いていただきたいと考えています。
私は、学生時代からUNIX(主にLinux)ユーザです。 これまで何度も、WindowsやMacに移行しようと思ったのですが、マウスが苦手であったり値段が高かったりという理由で挫折してきました。 Linuxでは市販のアプリを買って使うということは、あまり期待できません。 そのため、標準のアプリがなければ、自分でアプリを開発しなければなりません。
その開発の言語として、以前はPerlを使っていました。 今から約20年前、Perlからの移行先として選んだのが、Pythonでした。
Pythonを使い、様々なアプリを開発しました。
例えば、サーバの状態を調査して報告の電子メールを送信するアプリや、画像の画質を調整してファイルサイズを小さくするアプリなどです。
でも、その多くが数百行程度の簡単なもので、コマンドラインから実行するものばかりで、GUIアプリには、全く興味がありませんでした。
Makdoも、当初は、コマンドライン上で、①MS Word形式のファイルをMarkdown形式の原稿に変換するスクリプト(makdo_docx2md.py)と、②Markdown形式の原稿をMS Word形式のファイルに変換するスクリプト(makdo_md2docx.py)として開発を開始しました。
しかし、約1年前に、実際に原稿を編集するエディタがなければ、誰も使わない(使えない)ということに気が付きました。 そこで、③これらのスクリプトのランチャーとして機能し、Markdown形式の原稿を編集するエディタ(makdo_editor.py)の開発を開始しました。
はじめてのGUIアプリの開発で、戸惑うことも多かったですが、楽しく勉強しながら、開発させていただきました。
このエディタの完成により、私は長年お世話になったEmacsと遂にサヨナラすることになりました。 Makdoの方がEmacsよりも便利になってしまったためです。 Makdoの方が便利なのは当然で、私がEmacs、MS Word、LibreOfficeの便利な機能を全て実装したうえに、Emacsでは実装が難しかった機能も実装したからです。
なお、Emacs、MS Word、LibreOfficeが素晴らしいエディタであること自体は否定しません。 Pythonのコードを書くエディタとしては今もEmacsを愛用していますし、WS WordやLibreOfficeは、文章を書く道具として、たくさんの方に使われています。
MS Word形式のファイルをMarkdown形式のファイルに変換したり、Markdown形式のファイルをMS Word形式のファイルに変換するアプリは、すでに存在しています。 有名なものは「pandoc」です。 それらのアプリは、段落番号を自動入力する機能などを前提としていますが、多くの弁護士やお客様はこれらの機能を使いこなせていません。 そのため、本文の内容から段落番号を抽出してMarkdownに変換する必要があり、そのために自作しなければなりませんでした。
また、便利なMarkdownエディタもたくさん存在しています。 しかし、Makdoは書面をきれいに作成するためにMarkdown記法を拡張しており、エディタはその拡張に色付けやインデントで対応する必要があるため、エディタを自作しなければなりませんでした。 しかも、自作エディタは、ほしい機能をいくらでも実装でき、カスタマイズし放題です。
Makdoには様々な機能を実装しています。
①Markdownエディタとしての基本的機能 ②Markdownのタグや法律用語などに色を付けて見やすくする機能 ③原稿に書かれている数式を計算する機能 ④原稿上の単語を辞書で調べる機能 ⑤画面を分割する機能 ⑥別の原稿との違いを確認し、編集中の原稿に反映させる機能 ⑦原稿内の節を折り畳んで、文章の流れを見やすくする機能 ⑧原稿内のカーソル移動を支援する機能
上記の内容を踏まえ、現時点では次のような流れでお話させていただければと考えております。
①自己紹介 ②Makdoの紹介(実際にMakdoを起動して見ていただきます) ③開発の動機 ④開発の経過(開発の苦労話) ⑤機能のご紹介(技術的なご説明、実装に苦労話)
主にお伝えしたいことは、次の3点です。
①アマチュアでも、かっこいいアプリを開発できること ②Pythonを使えば、業務で使えるレベルのアプリを簡単に開発できること ③そして何より、自分で開発すれば、カスタマイズし放題!
よろしくお願いいたします。
Profile
広島県立安古市高校(広島市出身) 大阪大学理学部物理学科卒業(高エネルギー物理学) 京都大学大学院理学研究科修士(数理物理学) 弁護士(広島弁護士会所属、国政法律事務所)