DTP_SUPPORTをStreamlitで作った話:日本語字取り自動化ツールの開発記録

DTP_SUPPORTをStreamlitで作った話:日本語字取り自動化ツールの開発記録

DTP_SUPPORTをStreamlitで作った話:日本語字取り自動化ツールの開発記録

こんにちは。今回は、依頼を受けて作成した「日本語DTP字取りツール」というStreamlitアプリケーションについて、開発の経緯から実装、デプロイまでの道のりをお話ししようと思います。

1、発端:名寄せ自動化の依頼

「名前に合わせて五字取り、七字取りを自動でできるものが欲しい」という依頼を受けました。依頼者の方はすでにご自身で色々と試行錯誤されていたようで、どのような機能が必要か、具体的なイメージが固まっていました。そのため、ヒアリングはスムーズに進みました。

簡単に言うと、特定のルールに基づいて日本人名をスペースで区切り、5文字または7文字の形式に変換する必要がある、とのことでした。例えば、「田中太郎」という名前を5字取りすると「田中 太郎」、7字取りすると「田 中 太 郎」のようになります。

変換ルールは詳細に決められていたため、主な作業はそれをプログラムに落とし込むことでした。特に重要だったのは、以下の2点です。

  • 苗字リストの分離: 苗字を判定するためのリストは、外部ファイルとして用意し、アプリケーションに直接組み込まないこと。
  • エラー処理: ルール通りに変換できなかった名前は、明確にわかるように表示すること。

これらの要求を満たすアプリケーション開発がスタートしました。

2、開発環境

今回の開発で使用した環境は以下の通りです。

  • Python: 3.12
  • ライブラリ:
    • streamlit: 1.32.0
    • pandas: 2.1.4
    • numpy: 1.26.3
    • openpyxl: 3.1.2 (苗字リストとしてExcelファイルを読み込む可能性を考慮)

3、ファイル構成と実装のポイント

開発したコードはGitHubリポジトリで公開しています。詳細はこちらをご覧ください。

https://github.com/toma4423/dtp_support

過去にStreamlitアプリをいくつか作成した経験から、処理ごとにファイルを分割する癖があり、今回もいくつかのファイルに分けて実装しました。(もしかしたら、もっとシンプルにまとめられたかもしれません…)

app.py:アプリケーションの顔

これはアプリケーションのエントリーポイントとなるファイルです。主にユーザーインターフェース(UI)の定義と、処理結果の表示を担当させています。細かい変換ロジックは他のファイルに任せています。

重要な機能として、外部の苗字リスト(ExcelやCSVなど)をアップロードして読み込む機能を持たせています。名前を「苗字」と「名」に分割するためにこのリストを使用するのですが、リストの上から順に一致する苗字を探すように実装しました。

なぜなら、「東海林」さんと「東」さんのように、苗字の一部が別の苗字に含まれるケースがあるためです。この場合、「東海林」を先に判定しないと、「東」で区切られてしまい、正しく分割できません。そのため、苗字リストは必ず文字数の長い苗字から順に(上から下に)記述されている必要があります。

pattern5.py:五字取りのロジック

こちらには、事前に共有された五字取りのルールに従って名前を整形する処理を記述しています。実装してみると、条件分岐が多くなり、まさに全力の「if文」祭りとなりました。

pattern7.py:七字取りのロジック

同様に、七字取りの変換処理を記述したファイルです。こちらも多くの条件分岐が必要で、「こんなにifとelifを重ねてもちゃんと動くんだな」と、基本的ながら改めて感心しました。試行錯誤の末、なんとかルール通りの変換を実現できました。

4、公開:Streamlit Community Cloudへデプロイ

作成したアプリケーションは、多くの人に使ってもらえるようにWeb上に公開することにしました。デプロイ先には「Streamlit Community Cloud (streamlit.io)」を選びました。

GitHubにリポジトリを上げておけば、比較的簡単にアプリケーションを公開できるため、Streamlitで何か作った際にはよく利用しています。設定も簡単で、無料で利用できる範囲も広いため、個人開発者には非常にありがたいサービスです。

(近いうちに、Streamlitアプリをデプロイする手順も記事にまとめたいと考えています。)

5、使ってもらった感想

完成したアプリを依頼者の方に使っていただいたところ、

「できてる!これでよし!」

とのお言葉をいただき、ホッと一安心しました。

毎日頻繁に使う機能ではないそうですが、これまで数時間かかっていた作業が数分で終わるようになるかもしれない。プログラミングで課題解決に貢献できたことを実感でき、嬉しい瞬間でした。

6、開発を終えて:設計の重要性と今後の展望

今回の開発を通して、改めて「事前の詳細な設計」の重要性を感じました。

普段、自分用に何かを作る時や、ここまで要件が明確でない依頼を受ける時は、詳細な設計をせずに「作りながら考える」スタイルになりがちです。しかし今回は、最初に変換ルールや要件が細かく決まっていたおかげで、開発プロセスが非常にスムーズに進み、手戻りも少なく、最終的に依頼者の方にも一発でOKをもらえるものができました。

たとえ小規模なツール開発であっても、最初にしっかりと設計を作り込むことで、開発時間の短縮と品質向上につながるのだと、身をもって学びました。今後の開発でも、この経験を活かして、過不足のない設計を心がけていこうと思います。

また、Streamlit Community Cloudへのデプロイ作業についても、備忘録も兼ねて、手順を画像付きで解説する記事を作成する予定です。GitHubもStreamlit Community Cloudも英語サイトなので、初めて公開する際は少し戸惑うかもしれません(私も最初は半泣きでした…)。Pythonで作った便利なWebアプリを公開したいと考えている方の助けになれば幸いです。

今回作成したアプリケーションと関連リンク

この記事が、PythonやStreamlitを使ったアプリ開発に興味がある方の参考になれば嬉しいです。

Comments

No comments yet. Why don’t you start the discussion?

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です