Fultterを使ってみよう[1/3]

 どうにも今まで書いてきた内容がプロっぽくないのですけど、さらにプロっぽくない感じの内容をアップしていきます。今回は、Flutterが使えるようになるまでのお話です。秀和システムから出版されている『Android/ iOSクロス開発フレームワーク Flutter入門』を買ってきまして、これからFlutterを使ってみたいと思います。
  それで、ざっと書籍に目を通してみまして、一番最初に「マジか~」と思った点ですが、「Windowsでは、iOSアプリのビルドができない。」という点ですね。ぼくはWindowsマシンを使っていますので、ちょっとがっくりきました。アプリ開発は、macOSの方が有利、ということなのですね。まあ、当然と言われればそうなのでしょうけど、macOSからはどちらもビルドできるなんて、、、今までずっと抵抗していましたけど、そろそろ乗換時期なのかなぁ。MacProもかっこよかったし。。。

 はい、気を取り直して。まずはFlutter SDKのセットアップをします。書籍には色々と書いてあったのですけど、公式ホームページの手順に従ってやっていきたいと思います。基本的にはzipファイルをダウンロードしてきて、PATHを設定するだけで完了のはずです。
 まずはGoogle先生に「Flutter install」を聞いてみます。動画の次にインストール方法が出てきました。

 ぼくの環境はWindowsですので、こちらをクリックしました。

 システム必要要件です。OSはWindows10を使っていますので、問題ありませんね。ディスクもたくさん用意してありますので、問題ありません。そして、ToolsのWindows PowerShell 5.0以上は、Windows10の場合はプリインストールされている、ということですので、気にしなくてよさそうです。最後の「Git for Windows」が必要ですね。ホントにいるのかなぁ、と、思いつつも、入れておくことにします。

 クリックすると、勝手にダウンロードが始まりました。「Git-2.21.0-64-bit.exe」がダウンロードされましたので、ウィルスチェックしてから管理者権限を使ってインストールします。ユーザ制御は当然OKしました。

 「Next >」をクリックします。

 再度、「Next >」をクリックします。

 これも初期値でよさそうです。「Next >」をクリックします。

 スタートメニューのフォルダについて聞いてきました。特に変える理由もないので、そのままにして「Next >」をクリックします。

 はい、次はデフォルトエディタを選んでください、と、言ってきました。ぼくはどちrかというとVimエディタが大好きなので、このまま「Next >」をクリックします。Vimエディタのこと知らない、とか、使いにくい、というひとは変える必要がありますね。
選択肢としては、「the Nano」「Notepad++」「Visual Studio Code」「Visual Studio Code Insider」「Sublime」「Atom」「その他」となっていました。世界のエディタ情勢はこんな感じなのですね。サクラエディタが入っていません。

 次は環境変数のPATHについての質問です。ここもデフォルトで問題なさそうです。「Next >」をクリックします。

 HTTPSで接続するときに使うライブラリを選択します。特に認証サーバーとか使う予定はないので、デフォルトのままで問題ないでしょう。「Next >」をクリックします。

 テキストファイルの改行文字の設定ですね。デフォルトのままで。「Next >」をクリックします。

 コンソールをどうするか、という設定ですね。特にこだわりがないので、デフォルトのままで「Next >」をクリックします。

 だんだんうんざりしてまいりました。。。いや、いかん、気を取り直して。
さあ、エクストラオプションですよ!
キャッシュ、使いましょう、スピードを速くしてくれるんでしょ。Git Credential Manager使いましょう、きっと認証が楽になるんでしょ。シンボリックリンク、うん、使わなくてもいいね、Windowsだし。で、「Install」をクリックします。おお、やっとインストールできます♪

 そして、、、1分もしないうちに以下の画面が表示されました。

 Finish!フィニーッシュッッッ!

 あ、リリースノートがブラウザに表示されました。確かに「View Release Notes」にチェック入れたままでしたね。なるほど、インストール先のフォルダにReleaseNotes.htmlファイルがあるのですね。あとでじっくり読むことにしましょう。
 そして、システム必要要件がクリアできたので、やっと次ですね。

 上のボタンをクリックすると、「flutter_windows_v1.5.4-hotfix.2-stable.zip」ファイルがダウンロードされます。念のため、ウィルスチェックしておきましょう。そして、これを自分の好きなフォルダに解凍します。ぼくは、「C:\Flutter」にしようかな。Program Filesは高い権限が必要になるのでインストールしないでと書いてあるので気を付けましょう。そして、flutter_consle.batをダブルクリックして終了、ということですね。

 これは、保護じゃなくて、実行しますよ。中身を確認したけど、パスを追加して管理者権限でコマンドプロンプトを出しているだけですから。「詳細情報」をクリックします。

 ボタンが現れましたので、「実行」をクリックします。

 はい、実行されました。ちょっと長くなってきたので、続きは次回に。

ローマ字変換ファンクション

 お仕事でひらがなをローマ字に変換するプログラムが必要になったのですが、ちょっと調べてみて、うまく利用できそうなやつが意外となかったのでデータベースOracle用として作ってみました。
 ご利用は自己責任でどうぞ。

CREATE OR REPLACE FUNCTION HIRA2ROMAN (HIRA IN VARCHAR2)
  RETURN VARCHAR2
IS
  TYPE tMapping IS RECORD (
    hira varchar2(10), roman varchar2(10)
  );
  TYPE tTable IS TABLE OF tMapping INDEX BY BINARY_INTEGER;
  vTable tTable;
  REP VARCHAR2(4000);
-- http://www.mext.go.jp/b_menu/hakusho/nc/k19541209001/k19541209001.html
-- 第二表があるものはそちらを優先して、変換対象のひらがなが長い順にならべる
  PROCEDURE INIT IS
    i NUMBER;
  BEGIN
    i := 1;
    vTable(i).hira := 'きゃ'; vTable(i).roman := 'kya'; i := i + 1; -- 第一表
    vTable(i).hira := 'きゅ'; vTable(i).roman := 'kyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'きょ'; vTable(i).roman := 'kyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎゃ'; vTable(i).roman := 'gya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎゅ'; vTable(i).roman := 'gyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎょ'; vTable(i).roman := 'gyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'くぁ'; vTable(i).roman := 'kwa'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぐぁ'; vTable(i).roman := 'gwa'; i := i + 1; -- 第二表
    vTable(i).hira := 'しゃ'; vTable(i).roman := 'sha'; i := i + 1; -- 第二表
    vTable(i).hira := 'しゅ'; vTable(i).roman := 'shu'; i := i + 1; -- 第二表
    vTable(i).hira := 'しょ'; vTable(i).roman := 'sho'; i := i + 1; -- 第二表
    vTable(i).hira := 'じゃ'; vTable(i).roman := 'ja'; i := i + 1; -- 第二表
    vTable(i).hira := 'じゅ'; vTable(i).roman := 'ju'; i := i + 1; -- 第二表
    vTable(i).hira := 'じょ'; vTable(i).roman := 'jo'; i := i + 1; -- 第二表
    vTable(i).hira := 'ちゃ'; vTable(i).roman := 'cha'; i := i + 1; -- 第二表
    vTable(i).hira := 'ちゅ'; vTable(i).roman := 'chu'; i := i + 1; -- 第二表
    vTable(i).hira := 'ちょ'; vTable(i).roman := 'cho'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢゃ'; vTable(i).roman := 'dya'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢゅ'; vTable(i).roman := 'dyu'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢょ'; vTable(i).roman := 'dyo'; i := i + 1; -- 第二表
    vTable(i).hira := 'にゃ'; vTable(i).roman := 'nya'; i := i + 1; -- 第一表
    vTable(i).hira := 'にゅ'; vTable(i).roman := 'nyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'にょ'; vTable(i).roman := 'nyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひゃ'; vTable(i).roman := 'hya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひゅ'; vTable(i).roman := 'hyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひょ'; vTable(i).roman := 'hyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'びゃ'; vTable(i).roman := 'bya'; i := i + 1; -- 第一表
    vTable(i).hira := 'びゅ'; vTable(i).roman := 'byu'; i := i + 1; -- 第一表
    vTable(i).hira := 'びょ'; vTable(i).roman := 'byo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴゃ'; vTable(i).roman := 'pya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴゅ'; vTable(i).roman := 'pyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴょ'; vTable(i).roman := 'pyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'みゃ'; vTable(i).roman := 'mya'; i := i + 1; -- 第一表
    vTable(i).hira := 'みゅ'; vTable(i).roman := 'myu'; i := i + 1; -- 第一表
    vTable(i).hira := 'みょ'; vTable(i).roman := 'myo'; i := i + 1; -- 第一表
    vTable(i).hira := 'りゃ'; vTable(i).roman := 'rya'; i := i + 1; -- 第一表
    vTable(i).hira := 'りゅ'; vTable(i).roman := 'ryu'; i := i + 1; -- 第一表
    vTable(i).hira := 'りょ'; vTable(i).roman := 'ryo'; i := i + 1; -- 第一表
    vTable(i).hira := 'あ'; vTable(i).roman := 'a'; i := i + 1; -- 第一表
    vTable(i).hira := 'い'; vTable(i).roman := 'i'; i := i + 1; -- 第一表
    vTable(i).hira := 'う'; vTable(i).roman := 'u'; i := i + 1; -- 第一表
    vTable(i).hira := 'え'; vTable(i).roman := 'e'; i := i + 1; -- 第一表
    vTable(i).hira := 'お'; vTable(i).roman := 'o'; i := i + 1; -- 第一表
    vTable(i).hira := 'か'; vTable(i).roman := 'ka'; i := i + 1; -- 第一表
    vTable(i).hira := 'が'; vTable(i).roman := 'ga'; i := i + 1; -- 第一表
    vTable(i).hira := 'き'; vTable(i).roman := 'ki'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎ'; vTable(i).roman := 'gi'; i := i + 1; -- 第一表
    vTable(i).hira := 'く'; vTable(i).roman := 'ku'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぐ'; vTable(i).roman := 'gu'; i := i + 1; -- 第一表
    vTable(i).hira := 'け'; vTable(i).roman := 'ke'; i := i + 1; -- 第一表
    vTable(i).hira := 'げ'; vTable(i).roman := 'ge'; i := i + 1; -- 第一表
    vTable(i).hira := 'こ'; vTable(i).roman := 'ko'; i := i + 1; -- 第一表
    vTable(i).hira := 'ご'; vTable(i).roman := 'go'; i := i + 1; -- 第一表
    vTable(i).hira := 'さ'; vTable(i).roman := 'sa'; i := i + 1; -- 第一表
    vTable(i).hira := 'ざ'; vTable(i).roman := 'za'; i := i + 1; -- 第一表
    vTable(i).hira := 'し'; vTable(i).roman := 'shi'; i := i + 1; -- 第二表
    vTable(i).hira := 'じ'; vTable(i).roman := 'ji'; i := i + 1; -- 第二表
    vTable(i).hira := 'す'; vTable(i).roman := 'su'; i := i + 1; -- 第一表
    vTable(i).hira := 'ず'; vTable(i).roman := 'zu'; i := i + 1; -- 第一表
    vTable(i).hira := 'せ'; vTable(i).roman := 'se'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぜ'; vTable(i).roman := 'ze'; i := i + 1; -- 第一表
    vTable(i).hira := 'そ'; vTable(i).roman := 'so'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぞ'; vTable(i).roman := 'zo'; i := i + 1; -- 第一表
    vTable(i).hira := 'た'; vTable(i).roman := 'ta'; i := i + 1; -- 第一表
    vTable(i).hira := 'だ'; vTable(i).roman := 'da'; i := i + 1; -- 第一表
    vTable(i).hira := 'ち'; vTable(i).roman := 'chi'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢ'; vTable(i).roman := 'di'; i := i + 1; -- 第二表
    vTable(i).hira := 'つ'; vTable(i).roman := 'tsu'; i := i + 1; -- 第二表
    vTable(i).hira := 'づ'; vTable(i).roman := 'du'; i := i + 1; -- 第二表
    vTable(i).hira := 'て'; vTable(i).roman := 'te'; i := i + 1; -- 第一表
    vTable(i).hira := 'で'; vTable(i).roman := 'de'; i := i + 1; -- 第一表
    vTable(i).hira := 'と'; vTable(i).roman := 'to'; i := i + 1; -- 第一表
    vTable(i).hira := 'ど'; vTable(i).roman := 'do'; i := i + 1; -- 第一表
    vTable(i).hira := 'な'; vTable(i).roman := 'na'; i := i + 1; -- 第一表
    vTable(i).hira := 'に'; vTable(i).roman := 'ni'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぬ'; vTable(i).roman := 'nu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ね'; vTable(i).roman := 'ne'; i := i + 1; -- 第一表
    vTable(i).hira := 'の'; vTable(i).roman := 'no'; i := i + 1; -- 第一表
    vTable(i).hira := 'は'; vTable(i).roman := 'ha'; i := i + 1; -- 第一表
    vTable(i).hira := 'ば'; vTable(i).roman := 'ba'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぱ'; vTable(i).roman := 'pa'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひ'; vTable(i).roman := 'hi'; i := i + 1; -- 第一表
    vTable(i).hira := 'び'; vTable(i).roman := 'bi'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴ'; vTable(i).roman := 'pi'; i := i + 1; -- 第一表
    vTable(i).hira := 'ふ'; vTable(i).roman := 'fu'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぶ'; vTable(i).roman := 'bu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぷ'; vTable(i).roman := 'pu'; i := i + 1; -- 第一表
    vTable(i).hira := 'へ'; vTable(i).roman := 'he'; i := i + 1; -- 第一表
    vTable(i).hira := 'べ'; vTable(i).roman := 'be'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぺ'; vTable(i).roman := 'pe'; i := i + 1; -- 第一表
    vTable(i).hira := 'ほ'; vTable(i).roman := 'ho'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぼ'; vTable(i).roman := 'bo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぽ'; vTable(i).roman := 'po'; i := i + 1; -- 第一表
    vTable(i).hira := 'ま'; vTable(i).roman := 'ma'; i := i + 1; -- 第一表
    vTable(i).hira := 'み'; vTable(i).roman := 'mi'; i := i + 1; -- 第一表
    vTable(i).hira := 'む'; vTable(i).roman := 'mu'; i := i + 1; -- 第一表
    vTable(i).hira := 'め'; vTable(i).roman := 'me'; i := i + 1; -- 第一表
    vTable(i).hira := 'も'; vTable(i).roman := 'mo'; i := i + 1; -- 第一表
    vTable(i).hira := 'や'; vTable(i).roman := 'ya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ゆ'; vTable(i).roman := 'yu'; i := i + 1; -- 第一表
    vTable(i).hira := 'よ'; vTable(i).roman := 'yo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ら'; vTable(i).roman := 'ra'; i := i + 1; -- 第一表
    vTable(i).hira := 'り'; vTable(i).roman := 'ri'; i := i + 1; -- 第一表
    vTable(i).hira := 'る'; vTable(i).roman := 'ru'; i := i + 1; -- 第一表
    vTable(i).hira := 'れ'; vTable(i).roman := 're'; i := i + 1; -- 第一表
    vTable(i).hira := 'ろ'; vTable(i).roman := 'ro'; i := i + 1; -- 第一表
    vTable(i).hira := 'わ'; vTable(i).roman := 'wa'; i := i + 1; -- 第一表
    vTable(i).hira := 'を'; vTable(i).roman := 'wo'; i := i + 1; -- 第二表
  END;
BEGIN
  INIT;
  REP := HIRA;
  FOR i in vTable.FIRST .. vTable.LAST LOOP
    REP := REPLACE(REP, vTable(i).hira, vTable(i).roman);
  END LOOP;

  -- その他の変換ルール
  -- yと母音(aeiou)が続く「ん」は、「n'」と続くyまたは母音(aeiou)に変換
  REP := REGEXP_REPLACE(REP,'ん([yaeiou])','n''\1');
  -- その他の「ん」は「n」に変換
  REP := REPLACE(REP,'ん','n');
  -- 「っ」は、続く子音の文字を重ねるよう変換
  REP := REGEXP_REPLACE(REP,'っ(.)','\1\1');
  RETURN REP;
END;
/