Upgrade to Pro — share decks privately, control downloads, hide ads and more …

アプリ開発者のための MySQLお役立ち機能マップ

Avatar for mikoma mikoma
September 06, 2025

アプリ開発者のための MySQLお役立ち機能マップ

2025年9月6日のODCでの発表資料です。
MySQLをストレージとして使うのではなく、アプリ開発にも役立ちそうな機能をピックアップしてみました。

Avatar for mikoma

mikoma

September 06, 2025
Tweet

More Decks by mikoma

Other Decks in Technology

Transcript

  1. 生駒 眞知子 (Machiko IKOMA) MySQL Principal Solution Engineer Experience Expertise

    Location BIツール開発、オープンソース データベースに携わった後 日本オラクルに入社 MySQLのお客様・パートナーの 技術支援を担当 Tokyo 2 Copyright © 2025, Oracle and/or its affiliates 自己紹介
  2. MySQLの道のり Copyright © 2025, Oracle and/or its affiliates. 5 1995

    2000 2005 2010 2015 2020 2025 MySQL AB (MySQL社)創業 最初のバージョンを公開 独自のオープンソース・ ライセンスからGPLに 商用版サブスクリプション ”MySQL Network” 発表 オラクルがMySQLの トランザクション・エンジン InnoDBの開発企業 Innobase OYを買収 サン・マイクロシステムズが MySQL ABを$1B (約11億円)で買収 オラクルがサン・マイクロシステムズを $7.4B (約81億円)で買収することを発表 欧州委員会の承認を経て 2010年1月27日に買収完了 MySQL部門も MySQL Global Business Unit として統合 MySQL社の 日本法人 MySQL 株式会社設立 MySQLのクラウド・ サービスの第1世代を リリース 高速クエリ処理 エンジンを搭載した MySQL HeatWave リリース MySQLの第2世代クラウド・サービス MySQL Database Serviceをリリース v3.23 v4.0 v5.1 v5.0 v5.5 v5.6 v5.7 v8.0 v8.2 v8.1 イノベーション・リリースと LTS(Long-term Support) リリースで構成される 新しいリリースモデルを発表 v9.0 v8.4 LTS v8.3 v9.3 v9.1 日本MySQLユーザ会 (MyNA)設立 v9.2
  3. リリース形態の選択と定期的なパッチ適用 • バグ修正と新機能追加を行うリリース MySQL 8.1, 8.2, 8.3, 9.0, 9.1, 9.2,

    9.3 … • リリース方針 バグ修正 セキュリティ・パッチ 新機能追加 機能やパラメータの非推奨化および削除 • リリースサイクル 3ヶ月毎 次バージョンのリリースでEOL • 本番運用想定のテスト済み • バグ修正のみを行うリリース MySQL 8.4 • リリース方針 バグ修正 セキュリティ・パッチ バージョン間の互換性重視 • リリースサイクル リリース後8年間サポート 複数のLTSリリースをサポート予定 • 本番運用想定のテスト済み 新しい MySQL のリリース形態 Copyright © 2025, Oracle and/or its affiliates. 6 IR(イノベーション・リリース) LTS (Long-Term Support) リリース
  4. 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025

    2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 MySQL リリースとサポートのタイムライン 7 Copyright © 2025, Oracle and/or its affiliates. MySQL 8.1 MySQL 8.4 LTS Premier Support Extended Support Sustaining Support MySQL 5.7 MySQL 8.0 Bug Fix series MySQL 9.7 Candidate for next LTS – Apr. 2026 IR … … IR MySQL 9.1
  5. もっと使える MySQL 例えば、位置情報を扱うアプリ 近くの店舗を表示する →GIS機能(ST_Distance, ST_Within) 緯度経度を使った距離計算・範囲検索ができる 空間インデックス →SPATIAL INDEX

    空間検索を高速化 ピンの属性管理 →JSON型 ピンに可変のメタ情報を追加できる(例:画像URL) 8 Copyright © 2025, Oracle and/or its affiliates MySQLはテーブルにデータ入れて終わり…?
  6. 9 Copyright © 2025, Oracle and/or its affiliates MOTTAINAI ただのストレージじゃなくて、

    アプリ開発を楽に・安全にする道具としてMySQLを利用してみませんか?
  7. RDBの一貫性にNoSQLの柔軟性をプラス 12 Copyright © 2025, Oracle and/or its affiliates MySQL

    RDB JSON + RDBの強み+NoSQLの柔軟性 SQL利用/堅牢な管理/拡張性/アジャイル開発
  8. 例:JSON型を使ったテーブル設計例 商品情報 <products_json> 16 Copyright © 2025, Oracle and/or its

    affiliates 商品情報とサイズを管理する product_id INT PRIMARY KEY name VARCHAR(255) options JSON created_at TIMESTAMP product_id INT size VARCHAR(10) INDEX 商品サイズ<product_sizes> S INDEX M INDEX L INDEX XL INDEX Generated Column 正規化
  9. 例:JSON型 vs Generated Column vs 正規化 17 Copyright © 2025,

    Oracle and/or its affiliates 商品情報とサイズを管理する ◆ データ約100万行規模での比較例 (macOS M1, 32GB) ◆ サンプルSQL:サイズMの商品件数を抽出する (考察) • JSONに対する検索はフルスキャンとなるため実行時間が増える傾向 • Generated Column、正規化は近い性能で実行可能 • 正規化によるディスク効率低下の可能性 • 列数増加によってGenerated Columnの管理が煩雑になる可能性 方式 実行時間 JSON 615ms Generated Column 102ms 正規化 147ms
  10. JSONデュアリティビューのサポート ◼ CREATE JSON DUALITY VIEW/ALTER JSON DUALITY VIEWのサポート ◼

    データを直接JSONとして取得可能 ◼ JSONでのレスポンス統一 ◼ フロント側からはJSONオブジェクトのみを参照 ◼ JSONビュー側から基のテーブルも更新可能 (商用版のみ) 18 Copyright © 2025, Oracle and/or its affiliates MySQL 9.4 IR〜 https://dev.mysql.com/doc/refman/9.4/en/json-duality-views.html CREATE JSON DUALITY VIEW view_name AS SELECT JSON_DUALITY_OBJECT( '_id' : column1, 'key2' : column2, 'key3' : column3 ) FROM table_name;
  11. MongoDBからのデータインポート importJSON(<JSONドキュメントファイルパス>, <オプション>) • ファイルや標準入力からMySQL上のデータベースにJSONドキュメントをインポート • 挿入したデータはSQL文やAPI関数で操作可能 実行例 19 Copyright

    © 2025, Oracle and/or its affiliates MySQL Shell: JSONインポートユーティリティ(MySQL8.0〜) mysql-js> util.importJson("/tmp/products.json", {schema: "mydb", collection: "products"}) https://dev.mysql.com/doc/refman/8.4/en/create-table-generated-columns.html mysql-py> util.import_json("/tmp/products.json", {"schema": "mydb", "collection": "products"})
  12. MySQLのGIS機能の歴史 21 Copyright © 2025, Oracle and/or its affiliates MySQL

    Sun 2000 2005 2010 2015 2020 Oracle 4.1.0 (2003) MyISAMに Spatial Extensions実装 5.0.16 (2005) InnoDBにも Spatial Extensions実装 8.0.0 (2016) 関数名をST_*系に統一 関数を大幅に追加 回転楕円体としての演算 5.7.1 (2013) Spatial専用の型を実装 Boostライブラリを利用した 再実装 8.0.11 (2018) GAとなる 8.0.32 (2023) 座標系変換がほぼ 全ての座標系に対応
  13. • GISデータを格納するための専用のデータが型ある • POINT:点 - 例:緯度、経度 • LINESTRING:線 - 例:ルート(道筋)

    • POLYGON:多角形 - 例:市町村の区画 • GEOMETRY:POINT、LINESTRING、POLYGONをまとめて扱える • GISデータを計算したり変換したりするための各種Spatial関数がある Copyright © 2025, Oracle and/or its affiliates 22 MySQLのGIS機能概要
  14. ◼ テキストデータをGISデータに変換するための関数 • ST_GeomFromText() • ST_PointFromText() • ST_LineStringFromText() • ST_PolygonFromText()

    • ST_MultiPointFromText() • ST_MultiLineStringFromText() • ST_MultiPolygonFromText() • ST_GeometryCollectionFromText() ◼ GISデータをテキストデータに変換するための関数 • ST_AsText() Copyright © 2025, Oracle and/or its affiliates 23 各種Spatial関数
  15. • GeoJSONデータをGISデータに変換するための関数 • ST_GeomFromGeoJSON() • GISデータをテキストデータに変換するための関数 • ST_AsGeoJSON() • 経度、緯度からGeohashを求めるための関数

    • ST_GeoHash() • Geohashをデコードし、デコードされたGeohash値を含むPOINTデータを返す関数 • ST_PointFromGeoHash() Copyright © 2025, Oracle and/or its affiliates 24 GeoJSONを扱うための関数、Geohashを扱うための関数もある 関数一覧: https://dev.mysql.com/doc/refman/8.4/en/spatial-function-reference.html
  16. 例:GIS機能活用例 25 Copyright © 2025, Oracle and/or its affiliates 東京タワーから5km圏内にある店舗を特定する

    店舗位置情報 <shops> id INT PRIMARY KEY name VARCHAR(100) location POINT SRID 4326 SPATIAL INDEX サンプルデータ INSERT INTO shops (name, location) VALUES ('Tokyo Station', ST_GeomFromText('POINT(35.6812 139.7671)', 4326)), ('Shibuya', ST_GeomFromText('POINT(35.6896 139.7004)', 4326)), ('Shinjuku', ST_GeomFromText('POINT(35.6895 139.7003)', 4326)), ('Ikebukuro', ST_GeomFromText('POINT(35.7289 139.7100)', 4326)); 5km
  17. 例:GIS機能活用例 26 Copyright © 2025, Oracle and/or its affiliates 東京タワーから5km圏内にある店舗を特定する

    ✓ 基準点(東京タワー)を設定 SET @user_loc = ST_GeomFromText('POINT(35.6586 139.7454)', 4326); ✓ サンプルSQL: 5km以内の店舗を抽出 SELECT name, ST_Distance_Sphere(location, @user_loc) AS dist_m FROM shops WHERE ST_Distance_Sphere(location, @user_loc) < 5000 ORDER BY dist_m; 5km ✓ 結果例 +---------------+--------------------------+ | name | dist_m | +---------------+--------------------------+ | Tokyo Station | 3187.1248482174333 | +---------------+--------------------------+ 東京駅
  18. 例:GIS機能活用例 27 Copyright © 2025, Oracle and/or its affiliates 東京タワーから5km圏内にある店舗を特定する

    ✓ サンプルSQL: 店舗の距離を確認 SELECT name, ST_Distance_Sphere(location, ST_GeomFromText('POINT(35.6586 139.7454)', 4326)) AS dist_m FROM shops ORDER BY dist_m; 5km ✓ 結果例
  19. • MySQL の「新しい」クライアント・プログラム • 2017 年に GA • SQL 以外にも

    JavaScript と Python をサポート • 開発や運用を効率化する各種 DevOps ユーティリティ • [Tab] キーでコード補完 地味に便利 • MySQL サーバーへの接続方法いろいろ • ユーザー名とパスワードのログイン情報を記憶させることも可能 • Linux: .mylogin.cnf に暗号化して格納 • macOS, Windows: OS の鍵管理システムを利用 MySQL Shell って何? Copyright © 2025, Oracle and/or its affiliates. 29 $ mysqlsh -u user -h host -P port -D schema $ mysqlsh --user=user --host=host --port=port --schema=schema $ mysqlsh user@host:port/schema $ mysqlsh --uri user@host:port/schema $ mysqlsh mysqlx://user@host:port/schema MySQL Shell を起動後に接続も可能 MySQL SQL > \js Switching to JavaScript mode... MySQL JS > \py Switching to Python mode... MySQL Py > \sql Switching to SQL mode... Commands end with ; MySQL SQL > MySQL Shell 8.1.0 Copyright (c) 2016, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation Other names may be trademarks of their respective owner Type '\help' or '\?' for help; '\quit' to exit. MySQL JS > \c user@host:port/schema
  20. 動作サンプル MySQL Shell Copyright © 2023, Oracle and/or its affiliates.

    All rights reserved. 31 [opc@test01 ~]$ mysqlsh [email protected] MySQL Shell 8.1.1 Copyright (c) 2016, 2023, Oracle and/or its affiliates. ...... Server version: 8.2.0-u1-cloud MySQL Enterprise - Cloud No default schema selected; type \use <schema> to set one. MySQL 10.0.X.X:33060+ ssl JS > const db = session.getSchema('tpch_10g'); MySQL 10.0.X.X:33060+ ssl JS > db.createCollection('CUSTOMER_DOC'); <Collection:myShCollection> MySQL 10.0.X.X:33060+ ssl JS > db.CUSTOMER_DOC.add({"title":"Hello World", "text":"This is the fir st post via mysqlx"}); Query OK, 1 item affected (0.0042 sec) MySQL 10.0.X.X:33060+ ssl JS > db.CUSTOMER_DOC.find('$.title = "Hello World"').sort(["title"]); { "_id": "0000657684930000000000000013", "text": "This is the first post via mysqlx", "title": "Hello World" } 1 document in set (0.0007 sec)
  21. MySQL Shellの主な機能 1. テスト環境の作成 「サンドボックス」MySQLサーバーの構築と起動 2. アプリ開発でJSONの利用 MySQLドキュメントストア (NoSQL APIとドキュメント・データベース)

    3. バックアップ/リカバリやデータ移動 ダンプ&ロードユーティリティ コピーユーティリティ パラレルインポートユーティリティ JSONインポートユーティリティ テーブルエクスポートユーティリティ 4. パフォーマンス関連情報の取得 診断ユーティリティ (Diagnostics Utilities) 5. バージョンアップ アップグレード・チェッカー・ユーティリティ 6. どこで作業しているかの確認 プロンプトのカスタマイズ 7. レプリケーションの構築 • グループ・レプリケーションの構築 MySQL InnoDB Cluster • 非同期レプリケーションの構築 MySQL InnoDB ReplicaSet • 災害対策構成の構築 MySQL InnoDB ClusterSet 32 Copyright © 2025, Oracle and/or its affiliates
  22. MySQL Shell for VS Code 33 Copyright © 2025, Oracle

    and/or its affiliates. VS Codeプラグインとして提供 データベースノートブックインタフェース • 書込み, 実行, 変更 MySQL Shell GUI コンソール • MySQL Shellの活用 MySQL環境の統合 • MySQLオンプレミスとHeatWaveインスタンス管理 ドキュメント:MySQL Shell GUI / MySQL Shell for VS Code https://dev.mysql.com/doc/mysql-shell-gui/en/
  23. MySQL ShellがサポートしているMySQL Server 34 Copyright © 2025, Oracle and/or its

    affiliates. 最新版の利用を推奨 • 公開時点でSustainingステータスになっていた5.7はオフィシャルにはサポート外 • 商用版ではEnterprise Edition以上がOracle Premier Supportの対象 https://www.mysql.com/jp/support/supportedplatforms/compatibility.html https://www.mysql.com/jp/products/ MySQL Server 5.7 8.0 8.4 LTS 9.0 IR MySQL Shell 8.0 8.4 LTS 9.0 IR MySQL Shell for VS Code 9.0
  24. MySQLアプリケーション開発方式 36 Copyright © 2025, Oracle and/or its affiliates Classic

    Client/Server Java/C#/... Apps MySQL Protocol/SQL MySQL REST サービス – サーバーレスアーキテクチャ Classic PHP/Java/... Web Apps MySQL Protocol/SQL HTTPS Web Servers + PHP HTTPS/CRUD ローカルネットワーク 限定 現在も使用されているが モバイル/PWAでは制限される Mobile/PWAのための 簡素化されたソリューション HTTPS/CRUD は モダンなアーキテクチャに フィット • すぐに使えるREST機能 • アプリ/PWA/モバイル開発の簡素化 • ミドルウェアの必要性を排除
  25. MySQL REST Service (MRS) 37 Copyright © 2025, Oracle and/or

    its affiliates 1. REST SQLエクステンション sql> CONFIGURE REST METADATA; sql> CREATE REST SERVICE /myService; sql> CREATE REST SCHEMA /sakila FROM `sakila`; • REST SQLエクステンションによる完全管理 • 使いやすさを向上させるGUIサポート 2. RESTful Web サービス • テーブル、ビュー、ルーチンの自動REST化 • {JSON} による結果返却 • 開発者サポート (GUI, CLI, API) 4. クライアントSDK生成 • RESTfulエンドポイント用SDK • エラーを防ぐ型化されたSDK • PrismaのようなAPI, 迅速なプロトタイプ生成 3. 強力なデータマッピング • ネストされたテーブルからRESTエンドポイントへの マッピングをSQLでサポート • ビジュアルデータマッピングエディター • SQLとSDKインターフェースのプレビュー
  26. MRSの機能概要 機能 説明 REST サービスライフサイクル管理 新しい REST サービスの開発、本番環境対応の REST サービスの公開

    AutoREST テーブル、ビュー、またはプロシージャへのRESTアクセスを有効にすると、 RESTfulサービスを介してアクセスできるようになります。 RESTデータマッピングビュー データはリレーショナルかつ階層的に整理されるため、概念的かつ操作的な 二重性が実現されます。 静的コンテンツの提供 AutoREST を用いた動的コンテンツの提供に加え、HTML、CSS、画像ファイ ルなどの静的コンテンツのアップロードも可能です。 ユーザー認証 MRS REST サービス固有の認証、ネイティブ MySQL 認証、OAuth2 認証 (FaceBook および Google でサインイン) など、さまざまな認証方法をサポー トしています。 ユーザー権限 行レベルのセキュリティ、ロールベースのセキュリティ、ユーザー階層ベースのセ キュリティ、グループベースのセキュリティ、グループ階層ベースのセキュリティ、 カスタム認証サポートの組み込みをサポート REST サービス SDK API 生成 TypeScriptを使用したインタラクティブなプロトタイピングのためのライブSDK APIアップデート、アプリケーション開発のためのSDK API生成 38 Copyright © 2025, Oracle and/or its affiliates
  27. MRSクイックスタート 1. MySQL Serverのデプロイ (MySQL 8.0.39以降をサポート) 2. VSCode/ MySQL Shell

    for VS Codeをセットアップ 3. MySQL Shell for VS Code拡張機能設定 4. MySQL Shell for VS Code にMySQL接続を追加、接続確認 5. MRS用のMySQLインスタンスを構成 6. ユーザ権限の設定 7. MySQL Routerをセットアップ 8. RESTエンドポイントの定義 40 Copyright © 2025, Oracle and/or its affiliates
  28. 参考情報 ➢ リファレンスマニュアル https://dev.mysql.com/doc/dev/mysql-rest-service/latest/#introduction-to-the-mysql-rest-service ➢ クイックスタートガイド https://dev.mysql.com/doc/dev/mysql-rest-service/latest/quickstart.html#setting-up-the-mysql-rest- service ➢ 新しいラボバージョン(検証向け):MySQL

    9.4.0-labs-MRS13 https://labs.mysql.com/ RESTサービスがMySQLサーバー上で直接実行されるため、MySQL Routerが不要に ※本番環境での利用は非推奨※ 詳細: https://blogs.oracle.com/mysql/post/uplevel-the-mysql-rest-service 41 Copyright © 2025, Oracle and/or its affiliates
  29. MySQLサーバーは全て共通のソースコードのためハイブリッド構成も可能 MySQLを自社で運用管理 MySQL HeatWave • MySQLチームが100%開発・ 提供するクラウド・サービス • Amazon RDS

    (MySQL)の 1/3以下のコスト • データ損失なし、自動フェイルオーバー の高可用性機能をマネージドサービス で提供 MySQL Operator for k8s • MySQL サーバーをKubernetes上に 構築し運用管理 柔軟なMySQLの利用方法 45 オンプレミスでのMySQL • バージョン選択や構成を 最も柔軟に選択可能 IaaS上でのMySQL • OCIのマーケットプレイスの イメージから簡単に環境構築 商用版MySQL • コミュニティ版に加え、サポートや セキュリティに優れた商用版も MySQLのマネージドサービス クラウドネイティブなMySQL いずれの利用方法でもMySQL開発チームと連携した 専門部隊によるサポートサービスをご利用いただけます※ Copyright © 2025, Oracle and/or its affiliates MySQL :: MySQL Operator for Kubernetes テクニカルアップデート ※コミュニティ版を除く
  30. • 最大のMySQLのエンジニアリングおよびサポート組織 • MySQL開発チームによるサポート • 29言語で世界クラスのサポートを提供 • メンテナンス・リリース、バグ修正、パッチ、アップデートの提供 • 24時間x365日サポート

    • MySQL コンサルティング・サポート 開発チームと一体となったサポートサービス ⇒ 商用版MySQL サーバー及び MySQL HeatWave 利用者に提供 Oracle Premier Support for MySQL Copyright © 2025, Oracle and/or its affiliates 46 Get immediate help for any MySQL issue, plus expert advice
  31. MySQL コミュニティ Copyright © 2025, Oracle and/or its affiliates 48

    9/6/2025 ▪ MySQL コミュニティの紹介 ▪ MySQL への貢献 ▪ Oracle Contribution Agreement (OCA) ▪ MySQL無償認証制度
  32. MySQL コミュニティの紹介 Copyright © 2025, Oracle and/or its affiliates 49

    • MySQL コミュニティへの貢献プロセスの運営 • MySQL ユーザーグループへの支援 https://dev.mysql.com/community/mug/ • 全世界でのサードパーティによるカンファレンスやイベントへの支援や参加 https://dev.mysql.com/community/ • 教育ビデオの作成 • MySQL 短編動画 (MySQL Shorts) • MySQL 入門編シリーズ (MySQL 101 for Biginners) • https://www.youtube.com/@mysql • MySQL RockStar プログラム • MySQLの利用促進に最も精力的に取り組んだ MySQL コミュニティ・メンバーへの表彰 • 第1回: https://blogs.oracle.com/mysql/post/mysql-rockstars-2022 • MySQL ACE プログラム • MySQL プロジェクトでの ACE プログラムの運営 • https://ace.oracle.com/pls/apex/ace_program/r/oracle-aces/home
  33. MySQL への貢献 • MySQL オープンソースプロジェクトのコントリビューターコミュニティへの参加: https://forums.oracle.com/ords/apexds/post/contributing-code-to-mysql-8037 • コントリビュータになるために持つべきこと • MySQL

    の機能を変更/修正したい、あるいは新しい機能を追加したいといった要望 • MySQL ソースコードのダウンロード http://dev.mysql.com/downloads/ • bugs.mysql.com のアカウント http://bugs.mysql.com or • 有効な GitHub アカウント https://github.com • Oracle Contribution Agreement (OCA) への署名 https://oca.opensource.oracle.com/ • OCAは、コントリビューターとオラクルの両方を法的攻撃から保護する短い法的契約です。OCAに署名することにより、コントリビュー ターはオラクルがコントリビューターのコードをオラクル・ソフトウェアで使用することが法的に許可されていること、およびコントリビューター の知る限りにおいて、そのコードに特許的な問題がないことに同意することになります。 Copyright © 2025, Oracle and/or its affiliates 50
  34. MySQL 無償認証制度 • MySQL コミュニティチームは、Oracle University および Oracle Academy と協力し、

    mylearn.oracle.com を介して、2ヶ月間の指定期間内に使用できる無料のトレーニングバウチャー/クレジッ トを受講者に提供します。 • ご興味のある方は、以下についての詳細をお知らせくだされば、MySQL コミュニティから連絡いたします。 • 名前 • 姓 • Email アドレス • 居住国 • https://education.oracle.com/ Copyright © 2025, Oracle and/or its affiliates 51
  35. 連絡先 • MySQL コミュニティとのコンタクト先一覧: • MySQL コミュニティページ, https://dev.mysql.com/community/ • MySQL

    Slack, https://mysqlcommunity.slack.com • The Oracle MySQL ブログ, https://blogs.oracle.com/mysql/ • The Oracle MySQL Japan ブログ, https://blogs.oracle.com/mysql-jp/ • Planet MySQL, https://planet.mysql.com/ • LinkedIn, https://www.linkedin.com/groups/60715/ • ブログ, https://lefred.be/ • MySQL フォーラム, http://lists.mysql.com/ • ディスカッションフォーラム, http://forums.mysql.com Copyright © 2025, Oracle and/or its affiliates 52