K ikeda's blog

WEBアプリ開発、データ分析などについて書いていきます。

人間単語帳アプリを作りました

お久しぶりです、kikedaです。

最近、私は個人開発で「人間単語帳アプリ」なるものを制作しました。

先日、iOS版が完成しました。 iOSユーザーの方、ぜひDLして使ってみてください。

HitoMemo - 人間単語帳

HitoMemo - 人間単語帳

  • Kenya Ikeda
  • Utilities
  • Free
apps.apple.com

またリポジトリはpublicにしていますので、以下からソースが見られます。

github.com

今回この記事で、開発の流れを紹介させて頂きたいと思います!

目次

1.どんなアプリか

2.技術面、特徴

3.制作のきっかけ

4.苦労した点

5.現状と今後

どんなアプリか

「人間単語帳」は、知り合った人の名前やプロフィールを記録し覚えるためのメモアプリです。

アプリのメイン画面では、登録してある人達のカードが一覧表示されます。 カードをタップすると詳細画面に移り、詳細の確認および編集/削除ができます。

登録画面では、名前に加えて、 * 所属組織(学校、職場、...) * 特徴(出身、趣味...) * その他エピソードなど

といった、その人のプロフィールに関するメモを箇条書きのような感覚で登録します。

特徴的なのが、クイズ機能です。 問題数を選択してスタートすると、プロフィールだけが表示され、対応する正しい名前を選択肢から選ぶというクイズが始まります。 このクイズによって単語帳で英単語を覚えるような感覚で、知り合った人の名前を暗記することができます。

以上が本アプリの主な機能です!

技術面と特徴

開発にはFlutterを使用しています。 iOS, android, その他様々なプラットフォームを統一的に開発することができる個人開発にはもってこいのフレームワークです。

単純なアプリなので、基本的には標準のライブラリばかり使用しています。 パッケージを管理するファイルpubspec.yamlの記述は現状これだけです。

(今後画像登録機能を追加したり、多言語対応などでもう少し増えるとは思います。 また実は初めは状態管理にRiverpodを使用していたのですが、今の自分にはとっつきづらく😅、StatefulWidgetで書いています。)

データ永続化のためのDBとしてはIsarを採用しています。 こちらは数あるFlutter向けのローカルDBの一つですが、ブラウザでレコードの状態が確認/編集できるInspectorなどの機能が開発するうえで非常に便利です。 こちらも個人開発にはおすすめです。

制作のきっかけ

  • 「久々に会ったこの人、パッと名前が思い出せない、何さんだっけ...?」
  • たまにしか会わない人との細かいプロフィールを忘れてしまう。
  • 他の人と名前やエピソードを間違えてしまい、気まずい思いをする。

全て、自分自身で経験済みです😇

これらの悩みを解消するため、このアプリを作ろうと思い立ちました。

苦労した点

DBを使う以上、読み出しや書き込みで非同期処理が必要になるため、FutureBuilderやStreamBuilderの扱いで苦労しました。 また関連してレコードのプロパティであるlistを編集する際、組み込み関数のadd()やremoveAt()が使えず、代替表記することが必要でした。

静的解析ではエラーにならず実行後にExceptionが発生することも多く、ブレークポイントを張ってのデバッグも必要になりました。

これらエラー解決にあたり、一人だけでは難しいと感じたので、オンラインのFlutter開発コミュニティや、大学のIT系コミュニティにも顔を出すようにして、有識者の皆さんにアドバイスを受けながら進めています。 こういったプロの方々の助けにより何とか解決できたので、今となってはとてもいい勉強になったと感じています。

現状と今後

今後はメモの入力動作など、編集機能の細かいところを詰めていきたいと思っています。

またこの経験を活用して、より高度なアプリ開発に取り組んでいきたいです。

感想や改善案など、反応いただけると何でも嬉しいです!

ご覧いただきありがとうございました。

卓球の得点板アプリを作りました

今回はタイトルの通り、卓球の得点板アプリを作りました。

Flutter製で、iOS、Androidそれぞれリリースしています。

iOS

Table Tennis Simple Scoreboard

Table Tennis Simple Scoreboard

  • Kenya Ikeda
  • スポーツ
  • 無料
apps.apple.com

Android

play.google.com

機能、実装

シンプルに、点数のカウントができます。

コートチェンジ、デュースにも対応。

undo, clearもできます。

シンプルなアプリのため、状態管理手法などは採用せずFlutterデフォルトのライブラリのみで実装しています。

直感的な操作性と、本物の得点板そっくりのデザインにこだわりました。

感想

今回初めてのモバイルアプリリリースを達成できました。

ストア申請は手続きが多く大変でしたが、やりきってみるとストアに自分のアプリが並ぶ喜びは大きかったです。

今後はより技術的に高度なものを目指し、アプリ個人開発を続けていこうと思います。



ではまた次の投稿で。

arXivの新着論文からキーワードを含む論文をチェックする自動ツールを作りました

今回はタイトルの通り、arXivの新着論文からキーワードを含む論文をチェックする自動ツールを作りました。

github.com

arXivとは

arXivとはプレプリントサーバ(査読前の論文を投稿するサーバ)です。

arXiv - Wikipedia

数学、物理、情報系の分野を中心に世界中で使われています。

特に物理のhep-th (high energy physics - theory, 素粒子理論 )ではarXivがデファクトスタンダードとなっています(arXiv自体がこの分野の研究者により設立されたため)。

機能、実装

このツールでは、最近投稿された論文全体から設定しておいたキーワードをabstractに含む論文を検索し、log.csvに書き出します。

データの取得にはarxiv APIのpython wrapperであるarxiv.pyを使っています。

pypi.org

本来、arXiv APIでの論文情報取得はhttpでgetリクエストするだけの1行で済みます。

しかし今回、生のarXiv APIのままだと日付指定による取得がすぐには出来なかったので、wrapperを使っています。

またGitHub Actionsにより毎日自動で更新させています。

GitHub上でubuntuを立ち上げ、Python環境を構築し、main.pyの実行後、リポジトリにcommit, pushさせています。

その際、投稿日が実行時点の3日前から1日前のものを取得するようにしています。

というのはarXivは土日は更新がなく、金土日ぶんの投稿が月曜に一気に更新されます。

よって前日だけの取得だと、金曜と土曜の投稿を取り逃がしてしまいます。

そのためこのような処理にし、重複は取り除いて処理しています。

感想

この分野ではarXivの新着論文は毎日チェックするべきなのですが、自分の研究に関連のある論文でも見落としがあることもありえるので、それを防ぐ補助的な用途として実用的なものが出来ました。
必要に応じてメールやSlackへの通知なども実装してもよさそうです。

参考になったサイト

arXiv API Access | arXiv e-print repository

PythonでarXiv APIを使って論文情報取得、PDFダウンロード | note.nkmk.me

arXiv API を用いて論文情報取得!(入門編 / python) | AIリサーチコレクション



簡潔ですがいったん以上です。

ではまた次の投稿で。

都道府県データの可視化サイトを作りました

はじめまして、K ikedaと申します。

物理系の大学院生をやりながら、趣味としてWEB開発、オーディオプログラミング、機械学習などに興味を持っています。よろしくお願いします。

今回はWEB開発の習作として、都道府県データの可視化サイトを作ってみました。 都道府県ごとの様々な統計データを地図とヒストグラムで可視化してくれるというものです。

ロードに少し時間がかかりますが、良ければ見てみてください。

https://prefecture-stat.herokuapp.com

都道府県データマップ
都道府県データマップ

このサイトでは、総務省統計局データ「統計でみる都道府県のすがた」を日本地図上にコロプレスマップとして描画します。

このオープンデータには人口・世帯、自然環境、教育、福祉・社会保障…など12の大項目があり、 人口、出生率から大学進学率、犯罪率、家電の普及率などなど、非常に幅広い都道府県別の統計情報が記載されています。

制作にはPythonのWEBワークフレームであるDashを使用し、地理情報はgeopandasで扱い、Herokuにデプロイしています。

GitHubのリポジトリはこちらです。 github.com

app.pyがメイン部分で、plotlyのcholopleth mapで描画を行なっています。

今後もこんな感じで、色々な小さい制作物をどんどん作って行けたらいいなと思っています。

よろしくお願いします。