郵便番号を検索するアプリを作ります
標準のApp Inventor 2日本語版にSQLiteエクステンション、Zipエクステンション、Fileエクステンションを追加して使用しています。また、簡単なSQL言語を使用しています。なお、Android 11以降ではREAD_EXTERNAL_STORAGEの権限が拒否される場合があるため、エラーが出る可能性があります。
ソースコードを見ながらこのチュートリアルを読んだ方がわかりやすいと思います。ページの最後にあるダウンロードセクションからソースコードをダウンロードしてからApp Inventorを開き、[ プロジェクト ]をクリックして[コンピュータからプロジェクト(.aia)をインポートします]を選択し、ソースコードを選択してインポートしてください。
アプリの構造(流れ)
SQLite自体はAndroidに標準装備です。
データベースファイルの準備
- 全国郵便番号データベース(約12万件)を事前にSQLite形式で作成し、このファイルをZIP圧縮してアセットに含めます。App Inventorのアセットの制限(5MB)を超えないように圧縮しています。
- 圧縮ファイルがアセットにない場合、指定サーバーからデータベースZIPファイルをダウンロードして使用する機能もあります。
ZIPファイルの解凍とデータベースのインポート
- ZIPファイルを解凍し、SQLiteにインポートします。その後、都道府県リストを取得してスピナーで表示します。
都道府県から町域までの選択フロー
- 都道府県が選択されると、その都道府県内の市町村リストをスピナーに表示。
- 市町村が選択されると、指定市町村内の町域リストを表示。
- 最終的に町域が選択されると、郵便番号が表示されます。
郵便番号データベースファイルの作成(App Inventorは使いません)
郵便番号データの取得
- 日本郵便のサイトから全国の郵便番号データをダウンロードします。
データの加工
- ダウンロードしたデータからローマ字列を削除し、通し番号の列を追加します。
- Shift JISからUTF-8に文字コードを変換して、CSVファイルとして保存します。
SQLiteデータベースの作成
- SQLiteのGUIツール(例: DB Browser for SQLite)でデータベースを作成し、データをインポートします。
- テーブル構造は以下の通りです。
CREATE TABLE "japanzip" (
"id" INTEGER NOT NULL UNIQUE,
"zip" TEXT,
"prefs" TEXT,
"city" INTEGER,
"street" TEXT,
PRIMARY KEY("id" AUTOINCREMENT)
);
- 作成したデータベースを
japanzip.sqlite
として保存し、ZIP圧縮してjapanzip.zip
とします。- ZIPファイルのダウンロード: japanzip.zip
プロジェクトを作成
[プロジェクト]メニューから[新規プロジェクトを始める]を選択し、”ZipJapan”と名前を付けます。
エクテンションの追加
- AppInventor extension for SQLiteからDownload AIXをクリックしてローカルパソコンにダウンロードし、org.bennedum.SQLite.aixをエクステンションパレットからエクステンションインポートをクリックしてインポートします
- https://puravidaapps.com/zip.php からTaifunZip extension (aix file)をダウンロードし、com.puravidaapps.TaifunZip.aixをエクステンションパレットからエクステンションインポートをクリックしてインポートします。
- https://puravidaapps.com/file.php からTaifunFile extension (aix file)をダウンロードし、com.puravidaapps.TaifunFile.aixをエクステンションパレットからエクステンションインポートをクリックしてインポートします。
デザイン編集
垂直配置レイアウトの設定
- 垂直配置レイアウトをビューアーにドラッグアンドドロップし、水平に整列するは"中央揃え"、横幅は"親要素に合わせる"に設定します。
- 以下のコンポーネントを順に追加します。それぞれのコンポーネントの名前はカッコ内のもの。
- ラベル(タイトル):背景色="#4285f4ff"、フォントサイズ=32、テキスト="郵便番号検索"、テキストカラー="白"。
- ラベル(空白):テキスト=空白。
- スピナー(選択ドロップダウン):目に見えるはチェックを外します。
- ラベル(初期化ラベル):フォントサイズ=10、テキスト="郵便番号データベースを初期化します。よろしければ下の初期化ボタンをクリックしてください。"、目に見えるはチェックを外します。
- ボタン(初期化ボタン):テキスト="初期化"、目に見えるはチェックを外します。
- ラベル(住所ラベル):テキスト="初期化中"、目に見えるはチェックを外します。
- テキストボックス(郵便番号):目に見えるはチェックを外します。
- ボタン(リセット):背景色="#4285f4ff"、テキスト="リセット"、テキストカラー="白"、太字フォントをチェック
非可視コンポーネントなど
- 接続 パレットから ウェブ を、ストレージ パレットから ファイル を追加。
- japanzip.zip ファイルをアセットにアップロードします。