MySQL GIS拡張関数: STX_Dwithin()

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。

STX_Dwithin(g1, g2, dist)

 ふたつのジオメトリの間の距離が、第3引数の範囲内かを判定して 1(範囲内)か 0(範囲外)を返す。

動作紹介

  • 辺が 3,4,5の長さとなる直角三角形の斜辺の長さは5 (つまり 5 以内か、の判定は True(1))
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(0 0)'),
    ->   ST_GeomFromText('POINT(3 4)'),
    ->   5
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • 上の条件で、5以内のかわりに「4.9以内か?」と判定条件を変更すると(長さは5なので) False(0)
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(0 0)'),
    ->   ST_GeomFromText('POINT(3 4)'),
    ->   4.9
    -> ) dw;
+------+
| dw   |
+------+
|    0 |
+------+
1 row in set (0.000 sec)
  • 点とポリゴンの距離
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(5 0.5)'),
    ->   ST_GeomFromText('POLYGON((0 0, 3 0, 3 1, 0 1, 0 0))'),
    ->   3
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • 点がポリゴンの内部にあるときは距離ゼロと判定されるので DWithin の判定値0で与えてもTrue(1)になる
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(1 1)'),
    ->   ST_GeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))'),
    ->   0
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • 東京駅と新宿駅は10km以内?
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(35.6812 139.7671)', 4326),
    ->   ST_GeomFromText('POINT(35.6905 139.7003 )', 4326),
    ->   10000
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)

ST_Within との違いは?

 名前の似ているMySQLの標準関数 ST_Within があります。 交差判定という用途も似ています。
ST_Withinは、与えられたジオメトリそのままでの比較を行いますが、ST_DWithinはその片方のジオメトリを少し膨らませたポリゴンを想定して、その交差を判定するという見方をすることもできます。厳密な包含ではなく、少し余裕を持たせた大きさにできるのが特徴ですね。細かい部分での動作の違いはあるのですが、概ね ST_DWithin は ST_Within + ST_Buffer を駆使して実現できるものと考えて良いでしょう。

MySQL GIS拡張関数: STX_RelateMatch()

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。

STX_RelateMatch(g1, g2, pattern)

 与えた2つのジオメトリの関係が、第3引数で与えたDE-9IM関係行列とマッチすることを判定する。どうでもよい部分は "* "にして与える。マッチする場合は1、アンマッチの場合は0を返す。


動作紹介

  • g1がg2に含まれる関係の判定
mysql> SELECT STX_RelateMatch(
    ->   ST_GeomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'),
    ->   ST_GeomFromText('POLYGON((0 0, 5 0, 5 5, 0 5, 0 0))'),
    ->   'T*F**F***'
    -> ) de9r;
+------+
| de9r |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • 同、敢えて判定にマッチしない文字列を与えたもの
mysql> SELECT STX_RelateMatch(
    ->   ST_GeomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'),
    ->   ST_GeomFromText('POLYGON((0 0, 5 0, 5 5, 0 5, 0 0))'),
    ->   'T*T**F***'
    -> ) de9r;
+------+
| de9r |
+------+
|    0 |
+------+
1 row in set (0.000 sec)
  • 境界のみ接していることの確認
mysql> SELECT STX_RelateMatch(
    ->   ST_GeomFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),
    ->   ST_GeomFromText('POLYGON((1 0, 2 0, 2 1, 1 1, 1 0))'),
    ->   'F***T****'
    -> ) de9r;
+------+
| de9r |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • ラインがポリゴンを横断する例
mysql> SELECT STX_RelateMatch(
    ->   ST_GeomFromText('LINESTRING(0 0.5, 3 0.5)'),
    ->   ST_GeomFromText('POLYGON((1 0, 2 0, 2 1, 1 1, 1 0))'),
    ->   'T*T***T**'
    -> ) de9r;
+------+
| de9r |
+------+
|    1 |
+------+
1 row in set (0.000 sec)

MySQL GIS拡張関数: STX_Relate()

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。

STX_Relate(g1, g2)

 DE-9IM 関係行列を返す。
2つの値について、以下の表のような相互の関係を求め、II IB IE BI BB BE EI EB EE の順となる9バイトの文字列にして返す。

              g2の内部(I)   g2の境界(B)   g2の外部(E)
              ──────────────────────────────────────
g1の内部(I) │     II     │     IB     │     IE
g1の境界(B) │     BI     │     BB     │     BE
g1の外部(E) │     EI     │     EB     │     EE

実行例

  • Polygonと点の関係
mysql> SELECT STX_Relate(
    ->   ST_GeomFromText('POINT(1 1)'),
    ->   ST_GeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))')) de9;
+-----------+
| de9       |
+-----------+
| 0FFFFF212 |
+-----------+
1 row in set (0.000 sec)
           Poly Poly Poly
            内  交差  外
Point 内    0    F    F 
Point 交差  F    F    F 
Point 外    2    1    2

ー PointはPolygonとあらゆる視点で交差していない(2行目がすべてF)

  • Polygonの内側にPoint(の内側=Pointそのもの)がある(0次元=点で)(1行目の1つめ)
  • 1行目それ以外は点と面は関与しあわない(F)
  • 点の外側部分は面の中にある(2次元で関与)(3行目1)
  • 点の外側部分は面の境界線と関与(境界線なので1次元で関与)(3行目2)
  • 点の外側部分は面の外側部分と面で関与(3行目3)

なので ならべて0FFFFF212となる。

.

  • g1とg2が逆の場合は、結果行列もタテヨコが逆になる。
mysql> SELECT STX_Relate(
    ->   ST_GeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))'),ST_GeomFromText('POINT(1 1)')) de9;
+-----------+
| de9       |
+-----------+
| 0F2FF1FF2 |
+-----------+
1 row in set (0.000 sec)
  • ポリゴンどうしが一部重なる
mysql> SELECT STX_Relate(
    ->   ST_GeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'),
    ->   ST_GeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))') ) de9;
+-----------+
| de9       |
+-----------+
| 212101212 |
+-----------+
1 row in set (0.000 sec)

  • まったく重ならない2つのポリゴン
mysql> SELECT STX_Relate(
    ->   ST_GeomFromText('POLYGON((10 10, 12 10, 12 12, 10 12, 10 10))'),
    ->   ST_GeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))') ) de9;
+-----------+
| de9       |
+-----------+
| FF2FF1212 |
+-----------+
1 row in set (0.000 sec)
  • ポリゴンが辺を共有して隣接(接触のみ、重なりなし)
mysql> SELECT STX_Relate(
    ->   ST_GeomFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),
    ->   ST_GeomFromText('POLYGON((1 0, 2 0, 2 1, 1 1, 1 0))')
    -> ) de9;
+-----------+
| de9       |
+-----------+
| FF2F11212 |
+-----------+
1 row in set (0.000 sec)

MySQL GIS拡張関数: STX_LineSubstring()

 自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。

STX_LineSubstring(line, start, end)

 LINESTRINGを指定した割合の場所でちょん切って返す関数です。
(0,0)-(0,100) のLINESTRINGを、0.3~0.75 の範囲で切り出すと (0,30)-(0,75) のLINESTRINGが返ってくる、といった動作をします。2点によるLINESTRINGのみでなく3点以上のLINESTRINGでも動作します。
 第2、第3引数に与えるのは 0.0-1.0の範囲の割合で、第2引数のほうが小さい必要があります。

実行例

  • (0 0)から (50 0)で直角に折れて(50 50)に至るLINESTRINGを 25%~75%の範囲となるよう抜き出し
mysql> SELECT ST_AsText(STX_LineSubstring(
    ->   ST_GeomFromText('LINESTRING(0 0, 50 0, 50 50)'),  0.25, 0.75)) g;
+-----------------------------+
| g                           |
+-----------------------------+
| LINESTRING(25 0,50 0,50 25) |
+-----------------------------+
1 row in set (0.000 sec)
  • 同じLINESTRINGを、切る位置も少し変えて抜き出し。折れ曲がる位置より前の部分が完全になくなることが分かる
mysql> SELECT ST_AsText(STX_LineSubstring(
    ->   ST_GeomFromText('LINESTRING(0 0, 50 0, 50 50)'),  0.6, 0.75)) g;
+-------------------------+
| g                       |
+-------------------------+
| LINESTRING(50 10,50 25) |
+-------------------------+
1 row in set (0.000 sec)
  • 終端位置を1よりも大きな値を指定した場合でも、線分が延びるわけではない。あくまでも与えられたLINESTRING内の抜き出し処理となる
mysql> SELECT ST_AsText(STX_LineSubstring(
    ->   ST_GeomFromText('LINESTRING(0 0, 10 0)'),  0.0, 1.2)) g;
+----------------------+
| g                    |
+----------------------+
| LINESTRING(0 0,10 0) |
+----------------------+
1 row in set (0.000 sec)
  • もちろん地理座標系でも正しく動作
mysql> SELECT ST_AsText(STX_LineSubstring(
    ->   ST_GeomFromText('LINESTRING(35.6812 139.7671, 35.6580 139.7016, 35.6896 139.7005, 35.7295 139.7109)', 6668),
    ->   0.2, 0.85)) g;
+-----------------------------------------------------------------------------------------------------------------------+
| g                                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| LINESTRING(35.67079406748978 139.7377211819216,35.658 139.7016,35.6896 139.7005,35.71032795942056 139.70590277639033) |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
  • 青線がもとのLINESTRING。赤線がSTX_LineSubstringで部分を切り出したもの

オープンソースカンファレンス2026東京春(OSC 2026 Tokyo/Spring)参加

2026年2月27,28日(金土)の 2日間にわたって駒沢大学で開催されたオープンソースカンファレンス2026東京春(OSC2026 Tokyo/Spring)に参加してきました。今回も日本MySQLユーザ会としてブース展示とセミナー1枠の開催をしてきました。
event.ospn.jp

定常運転

 1日目は11時から展示開始。11時の少し前に設営を完了し、全3部屋(オーディオ部屋入れると4部屋)ある各ブースの知り合いたちのところへご挨拶まわり。

まぁとにかく東京開催は規模が大きい。次に自分のブースに戻ってきたのは1時半近くでした。こんな感じのゆるいブース展示をやっていますので、MySQLユーザー会のブースのお手伝いをしてもいいなと思った方はぜひ一緒にやりましょう。
 少しブースで来場客のお相手などをしたらもうお昼の時間(といっても2時を大きく回っていますが)。同じくその時間に食べに行こうとしていた知人らとたまたま経路上で遭遇し、一緒にラーメン。戻ってからはさすがに真面目にブース対応しているうちに1日目終了。
 2日目は設営の時間もいらず、挨拶まわりも1日目にいなかった人を見つけてお話するぐらいだったので、サクッとブースに戻りブース対応。土曜日ということもあって、前の日と比べてとても多くの方が来場され、コロナ以降にようやく賑やかなOSCが戻ってきたなという印象を受けました。近隣ブースでのおしゃべり、自ブースでの対応などしつつ、いただいたセミナー枠でお話し、撤収、懇親会、を経て、熱い2日間が終わりました。

I/O 50周年

 とにかく今回印象的だったのは、工学社さんが出されていたブース。昔から「マイコン」を触っていた人たちにはお馴染み中のお馴染みの「月刊I/O誌」(いまもあるんですよ)が今年で創刊600号、50周年となるそうです。私もこどもの頃に読んでいたし、2003年ごろには記事を書いたこともあるので、特に思い入れが強いです。ひとつの雑誌が途切れることなく月刊刊行され続けてきたこと、本当にすごいと思います。1日目に感動したので、2日目には私の私物を3冊ほど(2023年が2冊と 1994年が1冊)展示用に提供させていただきました。同じ展示部屋だったので時々I/Oさんのブースの近くをうろうろしましたが、みなさん懐かしがっているようでした。良い。

 

「MySQLはいま」のセミナー

 2日目(土曜日)14時にセミナーをやらせていただきました。もともとは私が最近取り組んでいるMySQLのGIS機能についてお話するつもりだったのですが、この1ヶ月、更には特にこの2週間のうちにMySQLを取り巻く状況に様々なイベントが発生しました。そんなわけで(GISの話は「私が話したい話」として残しつつも)「いま」を紹介するセミナーといたしました。 多くの方にお越しいただきありがとうございます。
event.ospn.jp

「・MySQLのGIS機能を拡張する話
 ・MySQL界隈で最近起こっていることの話
 の2本だてです」
と紹介した上で、どちらを期待して今日は来てくれましたか、と最初に手を挙げてもらったのですが、0:100で後者でした。まぁそりゃそうよね。でもこのテーマにしたおかげでたくさん来てもらえたので、良かったです。

 多少センシティブな面がある話題でもあり、言葉での説明を前提として作成された資料の文言や少しふざけた言い回しが一人歩きするのも面倒なので、資料の公開予定はありませんが、ざっくりこんな話をしました。

・1月末に preFOSDEMで、Oracle内のMySQL担当トップが入れ替わることが発表された。コミュニティ回帰への宣言や3月3日にお披露目イベントをやることも
・コミュニティ回帰とは、ユーザからの報告にちゃんと対応するとか、Enterprise版だけだった機能をCommunity版に入れることにした、とか良い話
・新トップは、技術担当のジェイソンさんと、コミュニティ担当のヘザーさんという顔ぶれ
・この人達は今のJavaコミュニティを作り上げてきた人
・「今のJavaコミュニティを」という辺りで眉をひそめる人は多そう。だけどビジネスで安心して使えるJavaを育ててきたことには間違いないのではないか
・ところで、そういう感じなので、Oracleによる「更に独善的な」MySQLの支配が強まるのではとの不安の声もある
・2月17日に、そういった声を代表してペルコナ社が「(ざっくり言うと)OracleだけでやらないでみんなでMySQL育てようぜ」というオープンレターを発表 An Open Letter to Oracle: Let's Talk About MySQL's Future
・2月20日に急遽Oracleが「エキサイティングなお知らせだ。2月25日(日本時間だと24時=26日0時)にウェビナーをやるぜ!」と発表。案内はTwitterでのみ行われ、リンク先の申し込みページに行くと氏名とメアドを入れるフォームがあるだけ(開催後になってからイベントページが作成された)、申し込むとZoomの機能で受付メールが来て、「質問がある人はこちらへ!」と書かれたリンクはヘザーさんのメールアドレス(フォームですらない)という、「急いで企画したな」と分かるもの。なぜ、何に対して、こんなに急いだかはそれぞれのご想像で
・25日のイベント。1時間弱のものだったけど、新しいトップの方々を中心として、お話の仕方や表情などの空気感、しっかり説明していること(仕込みかどうか知らないけど質問から逃げずにちゃんとお話された印象)、などなど、個人的にはとても好印象だった

 基本的にみんな揉め事の話はワクワクするようなので、私のセミナーでも対立軸を明確にして少し面白おかしく仕立て上げようと思っていたのですが、25日のウェビナーの印象が想像以上に良かったので、何と言うかOracle社がこの「急ごしらえの」イベントを開催した意図が "火消し" であったとするならば、私個人としては、すっかり火を消された気分です。sakaik、チョロイ。 今後も一定の警戒心は持ちつつも好意的に注視していこうと思います。
 ただ、私は長年日本のコミュニティの盛り上げの一翼を担ってきた立場として、何かと複雑な思いはあるわけですが、多くの人にとっては「ただ、便利で高速で安定したMySQLというソフト」が欲しいだけだと思います。MySQLを提供する側の新しい人たち、新しい方針は、そういった多くのユーザにとって良いものになる予感はしています。

 みたいなことをお話させていただきました。思いのほか「Oracleさんヨイショ」みたいな話になってしまった気がして、終了後にちょっと反省しました(反省しなくていい)。とりあえず3月3日24時(JST)からオンラインイベントがあるので、あなた自身の目と耳で新たなMySQLのリーダーたちの声を聞いてみてもらいたいと思います(その結果、受けた印象が私とは正反対でも良いと思います。あなた自身で情報を得てみてほしい)。2人がメインで登場するのは最初の30分なので、眠かったらそこだけえも良いでしょう(私もそうなるかも)。
MySQL Global Forum – Built on 30 Years of Innovation

懇親会

 駒澤大学の同じ建物にある食堂をお借りしての大懇親会。たくさんの人と話せて、はじめての人ともお話し、時に私の知人同士(互いにはじめて)を引き合わせるきっかけになれたり、など、充実の空間です。料理もいっぱいあって(OSCの懇親会はハラペコで帰るイメージが私に染みついているので)意外性もあります(?)。 各地から参加されてる方のおみやげもありがとうございました。
 個人的なハイライトは、昨年からOSCに参加されている アイ・オー・データの方とI/O誌の方をお引き合わせできたこと。I/O and I-O。I/O誌は50周年ですが、I-O社も今年50周年だそうで、これは何か一緒にぶち上げて欲しいところです。おめでとうございます!
 どうでもいい話かもしれませんが、カレーがおいしかったです。駒澤大学の学食の銀座スエヒロさんによるものと思いますが(違ったらすいません)、懇親会にこんなカレーを出してくれる駒澤大学最高!

まとめ

 いつも見る顔が参加されていなかったりなど、ちょっとだけ勝手が違う部分もありましたが、それを補うパワフルな2日間でした。人の足が少し戻ってきたかなとの印象です。一方で、知識にも人にも触れることができるこんな場なのに、同僚や部下などを誘っても興味を示してくれないという悲しみの声も、会場内の雑談で複数聞きました。好みとか向上心とかそれぞれなので無理にお誘いするものでもないのですが、「知らないものに触れることができる」貴重な機会を活かせないのは勿体ないなぁとは思いますね。特定技術の狭い(深い)イベントも有意義ですが、OSCのような横断的な会でしか得られない養分もあります。 ようやく参加する意味が分かってきた頃には、もしかしたらこういうイベントはもうないかもしれませんよ(得てしてそういうものです)。 各地で開催されているOSC、あるいは他のITイベントに足を運ぶ技術者が増えたらいいのになぁと願います。

 で、2日間も歩き回り、立っている時間も長く、いつもより早起きして会場に行く、というのをしていたら、ぐったりしました。こんなに「眠すぎて起きていられないから寝る」ところまで疲れたのは久しぶりです。布団まで持っていったスマホを、充電ケーブル挿す時間さえ惜しんで眠りについてしまいました(笑)。楽しかったです!

MySQL GIS拡張関数: STX_Project()

MySQLにSpatial(GIS)関数をいっぱい追加したくて、Pluginを作っています。
sakaik.hateblo.jp

テストを兼ねて一つ一つ関数を紹介しています。

STX_Project(point, dist, azimuth)

 与えられた点を、指定された方向に、指定された距離だけ移動した点を返す。地理座標系の場合は地球の丸さを考慮して計算する。
方向は、北をゼロとした時計回りにラジアンで指定する。
LINESTRING や POLYGONでは動作しない(NULL)。

動作紹介

  • 霞ヶ関付近から真北(0度)に1000m移動した点
mysql> SET @g=ST_GeomFromText('POINT(35.6762 139.7503)', 4326);
mysql> SELECT ST_AsText(@g) p1, ST_AsText(STX_Project(@g, 1000.0, 0.0)) p2;
+-------------------------+----------------------------------------------+
| p1                      | p2                                           |
+-------------------------+----------------------------------------------+
| POINT(35.6762 139.7503) | POINT(35.685212817707345 139.75030000000004) |
+-------------------------+----------------------------------------------+
1 row in set (0.000 sec)

青がProject前のp1、赤がProject後のp2です。

  • 北東(右上45度)に500m移動した例
mysql> SET @g=ST_GeomFromText('POINT(35.6762 139.7503)', 4326);
mysql> SELECT ST_AsText(@g) p1, ST_AsText(STX_Project(@g, 1000.0, PI()/4)) p2;
+-------------------------+---------------------------------------------+
| p1                      | p2                                          |
+-------------------------+---------------------------------------------+
| POINT(35.6762 139.7503) | POINT(35.68257277254631 139.75811129521304) |
+-------------------------+---------------------------------------------+
1 row in set (0.000 sec)

補足説明

 POINTしか使えないし、こんな関数どんな時に使うのだろうとAIさんと会話して教えてもらいました。

  • Wi-Fiの電波の届く範囲や、レーダーの照射範囲などをシミュレーションする場合など、中心点から角度を5度ずつ変化させながら対象となる点を得る

- 基地局から北東30度〜60度の範囲に広がるポリゴンを作るためのPOINT特定など

  • 移動体の位置推定

- 「今この座標にいて、時速5kmで北西に15分進んだらどこにいるか?」

  • 定義どおりに正確な「境界線」を作るとき

- 法律や規約で「海岸線から垂直に12海里離れた点」のように、基準点からの距離と方位で場所が定義されている場合に利用

いずれも、他の移動系関数(ST_Translateなど)と違い、地球の丸さを考慮した計算をしてくれるので、特に距離が長い場合に効果を発揮するそうです。


文字コードを確認できるAndroidアプリ"CodeMild"を公開しました

 超久々に、Androidアプリを公開しました。文字を入力すると UTF-8をはじめとして、Shift_JISやEUC-JPなどでの文字コードを表示してくれるだけの、簡単なツールです。たぶん Google Play ストアで "文字コード" で検索してもらえれば出てくると思います。出てこないときは "CodeMild" で。

文字コードを16進数で確認したいときに便利

 街なかを歩いているときにふと、「そういえばSJISで "表"という字の1バイト目ってなんだったっけ?」と気になることってありますよね。一旦気になり出すと「"ソ"はどうだったっけ」などと、どんどん気になる範囲が拡がってきて、眠れなくなります。道を歩いているときなんで眠らないほうがいいんですが。
 そんなときに便利なアプリです。ぜひお手元の一台にインストールしてご活用ください。


無駄な設定項目

 そんな単機能なアプリですが、使い勝手を調整できるよう、無駄にしっかりと設定項目があります。16進数を表示する際に、バイト間に空白を入れたり、大文字小文字を設定したり。 個人的には「エンターキーで改行する」をオフにするモードがお気に入りです。もともと複数行を入力してコードを表示できる機能として考えていたのですが複数行対応なんて不要だという場合にこの設定をすると、Enterでコード表示が実行されて、サクサク操作できます。

今後

 今回の初回リリースで対応しているのは、UTF-8 Shift_JIS EUC-JP CP1252 の4つだけですが、アジア圏の文字を中心に、対応も自主を増やしていく予定です。そのほか、街の中で急に文字コード関連で調べたくなったときに便利な機能や、夜中にどうしても文字コードを調べたくなったときに役に立つ機能などがあれば充実を図りたいと考えています。

裏話、背景、

このツールって実は

 実はこのツール、西暦2000年台後半だったかな、Androidアプリを公開できるようになった最初期に、Javaでゴリゴリ書いて公開していたツールでした。その後、メンテもできなくなった(主に開発環境の再構築が面倒になってしまった)ことや、Googleさんの度重なる対応要請にも応答しなかった結果、公開停止となってしまっていました。
 とは言え、実は自分の手元にはアプリが残っている端末もあって、なにげに便利に使っていたので、改めて作ってみました。今回は Flutterを使っています。

公開作業は結構大変

 昔はアプリを作ったらぱっと公開できたような気がしているのですが(記憶曖昧)、いまは随分と複雑になっています。その手順も体験してみたかったのが今回の公開のきっかけのひとつでもあります。
 以前の開発アカウントが失効してしまったため、新たに開発アカウントを取得しました。新しめのアカウントだと大昔のアカウントよりも公開に厳しい制約があるようです。失効させなきゃよかった。。あの頃は「もうアプリ作る事なんてないしな」って思ってたんですよ、本当に。
 その公開手順。以外と手間暇掛かります。開発アカウントは取得済というところから始めても、

  • まず公開用のアプリを作って、テスト用公開の申請をする(Googleにアップロードする)
  • 12人以上の協力者を探す。12人にテストインストールをしてもらい、14日間経過する必要がある

- 起動回数が少ないとテストをしていないと判定されて審査に落ちるという話もあったので、ヒマなときになるべく起動して触ってもらうよう依頼
- 触ってもらえば何か意見をいただけるもので、何度か修正して最新版を限定公開。私は結局6バージョンリリースしました
- テスターさんにはなるべく最新版に追随してもらう

  • 14日間経過すると公開申請ができるようになるので申請
  • 数日待つと承認されるので、最後の一手間、「公開」用の手続きを行う

という結構長い期間をかけてようやく公開されます。中でも(検索するとまっさきにその情報がいっぱい出てきますが)「12人以上で14日間」という条件がかなりつらいですね。途中でこれを下回ってしまうと日数がクリアされるという話もあり、12人ギリギリではなくもう少し余裕を持ちたいところです。私は結局(あとから追加したのを含め)、15アカウントでテスト期間を乗り切りました。 自分や家族のほか、知人らにも多く協力していただきました。おかげで公開にたどり着きました。ありがとうございます!!
 なお、14日経過してからの公開審査の申請。7日くらいかかると書かれていましたが、今回は30時間ちょっとで承認されました。申請時に書く項目が各項目300文字まで書けるのですが、頑張ってすべて詳細な内容を200文字以上書いたことも良かったのかなと(真実はわかりませんが)思っています。

 せっかく開発環境を作ったことだし、アプリひとつよりは沢山のアプリを公開したほうが環境維持のモチベーションも高くなるので、いろいろ公開するぞ~!と思っていたのですが、なんだか今回公開のプロセスを体験してみて、もうおなかいっぱいになっちゃった気がしないでもないです。

Novicyl Labs ってなに

 今回(から)アプリを公開するにあたって、チーム名というか屋号というか、そういうのをつけることにしました。Novice(初心者)+Cycle(繰り返し)ということで、常に初心を忘れずに繰り返し、しょうもない低技術力なアプリを公開していこうというネーミングです。最初は実は Novel(新しい)だったんですが、たぶんNoviceのほうがイメージにピッタリ。
 改善点のたくさんある、ノビシロのあるアプリを目指しています。

そんなわけで

 そんなわけで、毒にも薬にもならないアプリなので(改めての事実上の)初回公開のご祝儀としてとりあえずインストールしちゃっていただけると喜びます。高評価や機能提案なども歓迎です。低評価は喜びませんがそれが利用者の実感なら仕方ない、受け入れます(笑)。