ながーーーーーい文字列を保存できるようにする for 日記アプリ

どうもこんばんは、みかんです。

**！！！！とつぜんですがたいせつなおしらせ！！！！**

2020年1月27日
App Maker の提供終了に向けた対応のご案内
https://support.google.com/a/answer/9682494?p=am_announcement&visit_id=637157414793613981-426262357&rd=1


??!???!?!?!???!?

残念ながら2021年1月19日には終了してしまうそうです(涙)
移行先はAppSheetかApp EngineかGoogleフォームだそうです・・・

消すのは忍びないので記事は残して置きますが、何かの間違いじゃ無い限り役に立つことはないでしょう・・・


**！！！！おしらせはおわりです！！！！！**

今回は長い文字列を保存できるようにする方法を書いてみます。
下記ステップでやっていきます。

* 日記アプリの下地を作る
* 長い文章を入れられるデザインにする
* とりあえず試してみる
* 長い文字列が入るように設定を変更する

# 日記アプリの下地を作る

ネタバレすると、設定1つ変えるだけで話が終わりなのですが、味気無いので日記アプリを作りながら説明したいと思います。

Start Appから作り、サササッと日記用モデルを作ります。

|![ap01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/9faf7f88-a04f-a10f-0828-c37632b251d8.png)|
|:-:|

![ap02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/e9d314d7-ded5-261e-ea3a-f67e496be096.png)|![ap03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/812b1dec-fc0d-f468-f1bf-a8ca4265c4a9.png)|![ap04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/b7182f65-01c0-8bb2-12c5-c748d3ee1ce3.png)|
|:---:|:---:|:---:|

|![ap05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/84c8a3e0-2a76-078c-e01c-01aba88f2384.png)|
|:-:|

入力欄は「Page」に作っていくことにしましょう。
Formウィジェットをビシッと置いて作っていきます。途中、「Edit」を指定している点に注意してください。
追加したあと、Contentパネルの縦の長さが足りないと思うので、下にぐいっと伸ばしましょう。

|![ap06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/022ba780-e45e-ff81-01ef-f5a29d9860e4.png)|![ap07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/3eedd50f-7fed-6f35-8708-7512380398b8.png)|![ap09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/3ba7ba1d-3182-c81a-9a1e-3b2d4ca2611c.png)|
|:---:|:---:|:---:|

|![ap08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/a2272d59-6e6b-2ab5-bcfc-c54e9faaf9d3.png)|![ap09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/cda866e0-6b83-3593-214f-8aea9a8d2063.png)|
|:---:|:---:|

|![ap10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/5947d0b0-a115-42e8-78d1-a5eb704ae59e.png)|
|:-:|

入力した日記を見返せるようにしたいので、見返したい日記を選ぶための一覧も追加していきます。
簡易な説明のため、ここでは一画面に無理やり追加していきます。


まずは、Contentパネルの設定を細工します。
入力画面の横に一覧を追加したいので、横方向のレイアウトに変更します。

|![ap11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/32a70760-bab0-c290-97ae-45a8373f85d2.png)|![ap12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/a262f6c8-93ed-5602-734c-6e5dbfececa0.png)|
|:---:|:---:|

変更するとこんな感じに。ちょっとUIがズレ込んでますが気にせず先に進みます。

|![ap13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/e2361786-57fc-f3fd-6b79-b463b4aad5b3.png)|
|:-:|

Listウィジェットを、右の空いたスペースにドラッグ&ドロップします。白いのでわかりにくいですが、下図のように追加されます。

|![ap15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/087ba492-2d57-e6bc-7297-e1f3aca4ccf9.png)|
|:-:|

さらにわかりにくいですが、Listの上のほうをクリックすると、1行分のレイアウトを設定するためのウィジェットも入っています。
そこに、日記のタイトルを表すためのラベルウィジェットを追加します。

|![ap16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/254622ee-1776-552f-cb8e-d514d300ca84.png)|![ap17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/bf10ea6f-780d-cd59-fe44-ead3935d8b33.png)|
|:---:|:---:|

ここで、ListのデータソースをDiaryに変更します。
そのあと、置いたラベルウィジェットのtextを、DiaryのTitleにバインドされるように設定します。これで、自動的に日記のタイトルがリストに並ぶようになります。

|![ap18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/0949cdb4-a06a-d026-317d-6ac1fcf99231.png)|![ap19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/83f65676-e3a9-ea5b-184e-e791321313a2.png)|
|:---:|:---:|

この時点での動作をPreviewで確認してみましょう。フォームをEditで作ったので、データの追加の仕方は癖があります。
空データを作る → データの中身を書き換える
という順番になります。
insertから始めると確認用の詳細画面も必要になり面倒なのでこれで良しとしています。

|![check1-compressor.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/66d65703-e1ce-b8da-7dbc-549a32d284a5.gif)|
|:-:|

デフォルトのEditフォームは、各入力フォームの値を即座にDBに書き込むという動きになっていることに注意しましょう。

# 長い文章を入れられるデザインにする

流れるように作ったものの、肝心の本文が1行だと全然入力できないですよね。
なので、色々入力できる便利なウィジェットの設定と、画面全体のレイアウト調整をします。

調整したものが下記になります。

|![ap21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/dd64906b-4653-6a56-6fe5-775cf7fcdf6a.png)|
|:-:|

直前の状態からの変更点を列挙します。

* ListウィジェットのHorizontalのSizeをfixedに変更、Widthを100にして短く。
* FormウィジェットのHorizontalのSizeをfill parentに変更。横幅を大きくとる。
* Formウィジェットにある本文用のTextBoxウィジェットを削除。かわりにText Editorウィジェットを挿入。
* Text EditorウィジェットのVerticalのSizeをfixedに変更。Heightも300に設定。

大体こんな感じです。 ~~めんどくさい~~ 長くなりそうだったので画像は割愛しました。

# とりあえず試してみる

沢山の文字を入れる領域ができたので、早速入れていきます。日記書くわけにもいかないので、wikipediaの日記ページから適当に拝借します。

|![ap22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/9bddd8ba-ac58-2e7c-2dea-0c869c25d54f.png)|
|:-:|

入力して、(保存させるため)フォーカスを外してみると・・・？

|![ap23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/0375be42-6d16-85ca-8adb-22893e78f4ff.png)|
|:-:|

Previewの下のコンソールに、何やらエラーが出ています。「Data too long」とか言っているので、長すぎて入らないみたいです。日記はついつい熱が入ると長文になりがちなので、これでは困りますね。

# 長い文字列が入るように設定を変更する

ということで、めちゃ長い前置きになりましたが、下記の対応によって長文対応ができます。

DiaryモデルのBodyフィールドを選択し、Advancedを押してみます。

|![ap24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/10c0543e-0100-90e5-82cc-b38a05d698c9.png)|
|:-:|

すると、下図のように「SQL Type VARCHAR(255)」といういかにも255文字しか入らない設定になっていることがわかります。

|![ap25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/dd5efc90-3ee1-bfd3-a811-0e0e24e1b0d1.png)|
|:-:|

なので、これを「TEXT」に変更します。TEXTは何文字でも(容量が許す限り)入ります。便利ですね。
(MySQL的に細かいことを言うと色々ありますが、App Makerの範疇ならとりあえずTEXTでいいかなと思います)

|![ap26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/c7638421-8ece-a42a-91e0-c14fdcf33f83.png)|![ap27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/43d024a4-72bc-8f7e-41c3-33db214d05d2.png)|![ap28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/a6fbcbd2-02e4-30b3-1e3d-b9d5bc62da40.png)|
|:---:|:---:|:---:|

「ながーーーーーい文字列を保存できるようにする」方法は「SQL TypeをTEXTに変える」だけなので、1文で終わる話だったのですが、無駄にノッてしまい長くなっちゃいました。
会社で日記保存できるアプリなんて需要無さそうですが、メール送信機能をつけたりして日報送信アプリにするとかだとそれっぽくなりそうです。件名自動生成したり本文フォーマット選べたり、送信先が固定されてたりとか、かゆいところをお世話してあげると喜ばれると思います。

うまく保存できている様子を載せておきます。 エラーが表示されないようになりました。後半で画面をリロードしていますが、ちゃんと保存されているため、本文が読み込まれている様子がわかります。

|![check3-compressor.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/03ce9122-4658-0730-3873-7607356634fd.gif)|
|:-:|

以上です。良いApp Makerライフを!