メむンコンテンツぞスキップ
芋出し画像

【東京11Rが新期に化けた】競銬ブックKD3の独自コヌド地獄をSQLiteマスタ統合でねじ䌏せた執念!Alma Core Pro開発蚘 #3

    どうも、アルマコアです

    本業は工堎の自動化機械やシヌケンサヌPLC・制埡盀の蚭蚈に向き合っおいる、ただの珟圹機械゚ンゞニアです。

    前回の第2回にも、たくさんの「スキ」やフォロヌをいただき本圓にありがずうございたす

    「1バむトズレたらむクむノ号が58.5キロ着になる」ずいう固定長バむナリの恐怖に、倚くの゚ンゞニアやデヌタ掟の方から熱い共感をいただき感無量です笑。

    さお、前回お話しした通り、マトリョヌシカのような二重圧瞮ファむル.zip → .lzhを剥き、公差±0の粟密加工さながらに .kd3 のバむナリ切り出しずSQLiteぞのむンポヌトに成功した私。

    「よっしゃ 党デヌタ、SQLiteのテヌブルに収たったで」

    「競銬ブックデヌタしか勝たん」

    「最匷の自䜜分析環境の完成や」

    時蚈の針は深倜2時。

    勝利を確信し、脳汁が出たくった倉なテンションのたた笑、私は蚘念すべき最初のテスト怜玢SQLク゚リを叩きたした。

    狙うは、週末のメむンレヌス「東京11R」。

    ずころが、画面に返っおきた結果を芋た瞬間、私の指がピタッず止たりたす。

    「  あっれ〜 おっかしい〜なぁ〜深倜2時のおかしなテンション」

    「俺、東京競銬堎11Rを遞んだよな なんで新期競銬堎11Rのレヌスが堂々ず出おきずるん  」

    「」の乱れ打ちですわ笑

    1バむトのズレも蚱されないバむナリ解析の壁をせっかく乗り越えたのに、その先に埅っおいたのは、さらにタチの悪い「独自コヌド䜓系の深い沌」でした。

    1. JIS芏栌のボルト穎に「独自ピッチのネゞ」を突っ蟌んでいた

    深倜2時のモニタヌの前で頭を抱えながら、私は再び競銬ブックKD3の仕様曞をひっくり返したした。

    そしお数分埌、衝撃の事実に気づきたす。

    競銬デヌタを少しでも觊ったこずがある人なら、JRA暙準の「堎所コヌド競銬堎コヌド」はなんずなく頭に入っおいたすよね。

    䞀般的なJRAJRA-VAN等のコヌド䜓系は、北から南ぞ綺麗に䞊んでいたす。

    • 01札幌 / 02凜通 / 03犏島 / 04新期 / 05東京 / 06䞭山 / 07䞭京  

    だから私は圓然のように、「東京は『05』、新期は『04』やろ」ずいう䞖間の垞識でク゚リを組んでいたんです。

    ずころが、競銬ブックKD3の仕様曞に曞かれおいた堎所コヌドは、たったくの別物でした。

    • 00京郜

    • 01阪神

    • 02䞭京

    • 03小倉

    • 04東京

    • 05䞭山

    • 06犏島

    • 07新期

    • 08札幌

    • 09凜通

    「京郜が『00』始たり 東京が『04』で、新期が『07』やず  」

    さすが関西発祥の老舗・競銬ブックさんですわ笑。

    京郜・阪神が先頭00・01に来る独自のコヌド䜓系になっおいたんです

    これを知らずに䞀般的なJRAコヌドの感芚でク゚リを叩けば、番号が党郚玉突きでズレおしたいたす。

    頭の䞭のJRAコヌド東京05で匕いたら、KD3の䞖界では「05䞭山」やし、KD3の東京04をJRA感芚で芋たら「新期」に芋える。

    深倜2時の寝䞍足な頭は、完党にパニックです。

    機械蚭蚈の䞖界で䟋えるなら、「JIS芏栌のM8ボルト穎に、海倖メヌカヌ独自のむンチネゞを無理やりねじ蟌もうずしお、ネゞ山が党郚バカになる」ようなものです。

    芏栌コヌド䜓系がズレおいるのに、そのたた぀なごうずしたら機械が正垞に動くわけがありたせん

    2. 堎所だけじゃなかった「独自コヌド」の癟鬌倜行

    「なるほど、堎所コヌドだけ気を぀ければええんやな」

    ず䞀瞬ホッずしたのも束の間、仕様曞を読み進めるうちに背筋が凍り぀きたした。

    独自コヌドの眠は、競銬堎だけではなかったのです。

    • 条件コヌド新銬00001、未勝利00003、オヌプン00004  かず思いきや、なぜかGⅠ -0051、GⅡ -0052 ずマむナス蚘号぀きのコヌドが混圚

    • 銬蚘号コヌド○父03、○垂04、○地05、○倖06  さらには「○父○垂□地」25 ずいった耇合蚘号たで现かく番号化

    • 毛色・血皮・産地コヌド栗毛01、鹿毛03、黒鹿毛04なぜか 20 や 24〜35 にも黒鹿毛が割り圓おられおいる謎仕様、浊河003、静内005、新冠006  。

    画面に出おくるのは、04 ずか -0051 ずか 006 ずいった無機質な数字ず蚘号の矅列ばかり。

    せっかく固定長バむナリをデコヌドしお文字ずしお読めるようになったのに、デヌタ同士の意味がたったく繋がらない状態でした。

    3. Pythonの「if文」で逃げるなDB内に「芏栌倉換アダプタ」を削り出せ

    さお、この倧量の独自コヌドをどうやっお「東京」「GⅠ」「黒鹿毛」ずいった正しい意味に翻蚳するか。

    プログラミング初心者がやりがちなのが、Pythonコヌドの䞭に盎接 if code == '04': venue = '東京' ず䜕癟行もの条件分岐if文を曞き連ねおしたうこずです。

    ダメなんです。

    機械゚ンゞニアずしお、「その堎しのぎの配線ツギハギ」だけは絶察に蚱せたせんでした。

    プログラムのあちこちに翻蚳甚のif文が散らばっおいたら、あずで仕様倉曎や䞍具合が出たずきにどこを盎せばいいか分からなくなるスパゲッティコヌド化するからです。

    「プログラム偎で無理やり力業で倉換したらアカン。デヌタベヌスの内郚に、どんな独自コヌドも矎しく吞収する『芏栌倉換アダプタ治具』を組み蟌たんかい」

    深倜2時、自分にそう蚀い聞かせたした笑。

    そこで私が採ったアプロヌチが、SQLite内に正芏化のための「マスタテヌブル矀蟞曞テヌブル」を培底的に蚭蚈するこずでした。

    SQL

    -- 1. 堎所コヌドマスタ (mst_venue)
    CREATE TABLE IF NOT EXISTS mst_venue (
        venue_code TEXT PRIMARY KEY NOT NULL,
        venue_name TEXT NOT NULL
    );
    
    INSERT INTO mst_venue (venue_code, venue_name) VALUES
    ('00', '京郜'), ('01', '阪神'), ('02', '䞭京'), ('03', '小倉'), ('04', '東京'),
    ('05', 'äž­å±±'), ('06', '犏島'), ('07', '新期'), ('08', '札幌'), ('09', '凜通'),
    ('10', '倧井'), ('11', '川厎'), ('12', '船橋'), ('13', '浊和'), ('14', '盛岡'),
    ('94', '南ア'), ('99', '北海');
    

    このように、堎所コヌドmst_venueをはじめ、

    • 条件衚mst_condition

    • 条件付加mst_condition_addition

    • 銬蚘号mst_horse_mark

    • 毛色mst_coat_color

    • 血皮mst_breed

    • 産地mst_birthplace

    • 予想ペヌスmst_expected_pace

    • 脚質mst_running_style

    に至るたで、すべおをSQLite内の独立したマスタテヌブルずしお完党に定矩したした。

    こうしおおけば、出銬衚テヌブルkol_den1やオッズテヌブルを呌び出すずきに、SQLの LEFT JOIN を1発かたすだけで、コンマ数秒で矎しい日本語ぞず自動倉換されたす。

    倉換ロゞックをすべおデヌタベヌス偎のマスタに閉じ蟌めたこずで、アプリ本䜓Pythonのコヌドは驚くほどシンプルで高剛性な状態を保぀こずができたした。

    たさに、異皮芏栌のパヌツ同士をピタリず繋ぎ合わせる「専甚蚭蚈の倉換フランゞ」がピシャリずハマった瞬間です

    4. 個人開発者が必ず挫折する「翻蚳地獄」をすべお過去にするために

    ハッキリ蚀いたす。

    競銬ブックKD3の生デヌタを個人で扱おうずするず、第2回でお話しした「固定長バむナリの1バむト切り出し地獄」でたず9割の人が心を折られたす。

    そしお、奇跡的にそこを突砎した残りの1割の人も、この「JRA暙準ず異なる独自コヌドずの泥沌の付き合い」で完党にKOされたす。

    週末の予想がしたいだけなのに、マむナス蚘号぀きの条件コヌドや䜕十皮類もある毛色コヌドの蟞曞䜜りで䜕週間も培倜するなんお、普通の人間なら発狂したすわ笑。

    だからこそ、私が開発しおいる『Alma Core Pro』には、絶倧な䟡倀があるず自負しおいたす。

    『Alma Core Pro』では、この気の遠くなるような「党コヌド倉換・マスタテヌブル統合」が、最初からすべおシステム内郚に組み蟌たれおいたす。

    • 京郜が 00 だろうが東京が 04 だろうが、ナヌザヌはコヌドの違いを1ミリも気にする必芁はありたせん。

    • アプリを開けば、すべおの出銬衚、過去成瞟、調教デヌタ、そしお予想オッズたでが、完党に正芏化・結合された矎しい状態で手元に展開されたす。

    泥臭いバむナリ解析も、ややこしい芏栌倉換の配線䜜業も、すべお私が裏偎で終わらせおおきたした笑。

    皆さんは、完成されたコックピットに座っお「勝぀ためのデヌタ分析」だけに100%脳みそを䜿えるずいうわけです

    5. 次回予告バラバラの29テヌブルに「呜」を吹き蟌む

    こうしお「固定長パヌスの壁」ず「独自コヌドの沌」を突砎し、すべおのデヌタが正しい意味を持っおSQLiteの䞭に䞊びたした。

    しかし、ただ終わりではありたせん。

    今の状態は、工堎の䞭に「粟密に加工された29皮類の郚品テヌブル」がバラバラに眮かれおいるだけです。

    • 出銬衚kol_den1

    • 過去成瞟kol_sei1

    • トラックマンの珟堎メモkol_com1や調教気配kol_den2

    • 単勝予想オッズkol_ods_detail

    • そしお今回䜜ったマスタ矀mst_venue 等

    これら党29テヌブルをいかにしお繋ぎ合わせ、コンマ数秒で連動する「1぀の生き物システム」ぞず昇華させたのか

    次回、

    【Alma Core Pro開発蚘 NO.4】党29テヌブルの党䜓配線図バラバラの生デヌタを「1぀の生き物」に繋いだリレヌション蚭蚈の極意。

    機械゚ンゞニアが心血を泚いだ、デヌタベヌスの「党䜓配線図ER図・リレヌション」の栞心に迫りたす

    どうぞお楜しみに

    ☕ 最埌たで読んでいただき、ホンマにありがずうございたした

    「京郜00始たり、老舗の癖が匷すぎる笑」「芏栌倉換アダプタの発想、珟堎感あっお奜き」ず思っおいただけたら、ぜひ画面䞋の「スキハヌトマヌク」や「フォロヌ」をポチッず抌しおいただけるず、開発の最高のガ゜リンになりたす

    ◀ 前の蚘事はこちら

    👉 【第2回1バむトのズレで即死固定長デヌタKD3を自䜜パヌサヌでねじ䌏せた倜】

    📚 【党話むッキ読み】自䜜競銬゜フト開発蚘マガゞン

    👉 [Alma Core Pro / MDI Pro 開発マガゞンを開く]

    ⏩ 次のお話はこちら

    👉 【第4回党29テヌブルの党䜓配線図バラバラの生デヌタを繋いだリレヌション蚭蚈】

    🀖 工堎のPLC屋が本気で曞く痛快重厚な自䜜Web小説も連茉䞭

    👉 [『転生したらむヌロン・マスクが倧統領だった件笑』第1話ぞ]

    👉 [本栌クラむムSFサスペンス『アブダクション・プロトコル』第1話ぞ]


     
     
    競銬のビッグデヌタず闘う機械゚ンゞニア。Python×SQLiteでDBアプリ『Alma Core Pro』解析アプリ『Alma MDI Pro』を個人開発䞭。指数解析、回収率に盎結するロゞカルな競銬予想ず開発裏話を気たたに発信したす。

    あなたぞのおすすめ