[{"data":1,"prerenderedAt":317},["ShallowReactive",2],{"$ft6jtkd6xhw3c":3,"$f1x9rvsuf4csn6":263},{"featured":4,"latest":129,"categories":227},[5,14,27,37,48,56,66,76,86,96,106,114,122],{"slug":6,"title":7,"date":8,"excerpt":9,"image":10,"categories":11},"custom-database-tables","Custom DataBase Tables","2015-11-24T02:29:34","You can create the new own table freely in the your WordPress database via this plugin. Then, you can make the management of table or (as view or entry or edit) data in a simple user interface.\\nAlso,","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fcdbt-overview.png",[12],{"slug":13,"name":7},"cdbt",{"slug":15,"title":16,"date":17,"excerpt":18,"image":19,"categories":20},"10_php_tips_for_developers","PHP開発者が心得ておくべき10の鉄則","2016-01-11T18:38:09","PHPだけに限った話ではないが、プログラミングを行うに当たって、心得て、準備しておくと失敗が劇的に減る事柄をまとめてある良い記事を見つけたので、私なりの解釈で意訳しつつ、経験則を踏まえてあらためてまとめてみた。 オリジナ…","\u002Fassets\u002Fuploads\u002F2016\u002F01\u002Feyecatch-php-10-tips.jpg",[21,24],{"slug":22,"name":23},"column","コラム",{"slug":25,"name":26},"development","開発関連",{"slug":28,"title":29,"date":30,"excerpt":31,"image":32,"categories":33},"jquery-timeline-v1","2種類の横型タイムラインを簡単に作成できる「jQuery.Timeline」をリリース","2017-05-29T14:55:46","現在開発しているサービスで利用するべく、横型タイムラインを生成できるjQueryプラグインを自作したので、そこだけ単独でリリースしてみた。 ソースコード等はGitHubの方にリリースしてあるので、興味のある方は、そち…","\u002Fassets\u002Fuploads\u002F2017\u002F05\u002Fjquery_timeline_image.png",[34],{"slug":35,"name":36},"jqtl","jQuery.Timeline",{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":43},"optimize-browser-cache-of-static-resources","更新されたJS、CSS、画像のみブラウザキャッシュを破棄して読み込ませる","2018-01-31T15:47:47","WEBサービスの保守や開発をやっていると、JavaScriptやスタイルシート、画像などの静的リソースを更新した際、しばしば「確認したけど、更新されてないよ」とか云われて、「ブラウザのキャッシュを消してからもう一度見て…",null,[44,47],{"slug":45,"name":46},"codes","コード集",{"slug":25,"name":26},{"slug":49,"title":50,"date":51,"excerpt":52,"image":53,"categories":54},"jquery-timeline","jQuery.Timeline version2 – full documentation","2019-03-04T20:40:48","Plugin Overview The jQuery.Timeline plugin provides you two types of the horizontal timeline. You can create a…","\u002Fassets\u002Fuploads\u002F2019\u002F03\u002Fjquery.timeline_v2.jpg",[55],{"slug":35,"name":36},{"slug":57,"title":58,"date":59,"excerpt":60,"image":61,"categories":62},"released-the-sloth","Released the Sloth of mobile-first CSS micro framework!","2019-04-16T18:04:25","I released the “Sloth” that is mobile-first CSS micro framework. I have long used frontend framewo…","\u002Fassets\u002Fuploads\u002F2019\u002F04\u002Fsloth_doc_head.png",[63],{"slug":64,"name":65},"sloth","Sloth",{"slug":67,"title":68,"date":69,"excerpt":70,"image":71,"categories":72},"challenge-to-conceal-the-wordpress-site","WordPressサイトを徹底的に秘匿化する","2020-02-02T23:59:58","私は自分の個人サイトをはじめ、仕事でもWordPressサイトを運用している。WordPressは気軽にサイトを立ち上げられてカスタマイズも簡単な、素晴らしいオープンソースなのだが、世界中で使われまくっているその知名度…","\u002Fassets\u002Fuploads\u002F2020\u002F02\u002Fshutterstock_1878005929.jpg",[73],{"slug":74,"name":75},"wordpress","WordPress関連",{"slug":77,"title":78,"date":79,"excerpt":80,"image":81,"categories":82},"what-is-forkor","Made a shortened URL app called Forkor","2020-07-07T22:27:01","What’s Forkor? Forkor is a service that provides a shortened URL feature that allows you to redirect any…","\u002Fassets\u002Fuploads\u002F2020\u002F07\u002Fforkor.png",[83],{"slug":84,"name":85},"forkor","Forkor",{"slug":87,"title":88,"date":89,"excerpt":90,"image":91,"categories":92},"manual-about-svg-japan","インタラクティブな日本地図を生成するJSプラグイン「SVG Japan」","2020-11-16T21:19:58","各都道府県をそれぞれ選択・クリック可能なインタラクティブな日本地図を生成するネイティブJavaScript建てのプラグイン「SVG Japan」を作ったので、その紹介と使い方をまとめておく。ちなみにソースコードはgit…","\u002Fassets\u002Fuploads\u002F2020\u002F11\u002Fsvg-japan.png",[93],{"slug":94,"name":95},"svg-japan","SVG Japan",{"slug":97,"title":98,"date":99,"excerpt":100,"image":101,"categories":102},"wp-ignitor-plugin-to-conceal-wordpress-site","WordPressサイトを秘匿化するプラグイン「WP Ignitor」","2021-01-19T15:28:21","以前「WordPressサイトを徹底的に秘匿化する」という記事で、WordPress建てのサイトを秘匿化する方法を取り上げたのだが、あれをサイト構築時に毎度実施するとなるととても労力が必要であった。そこで、もっとお手軽…","\u002Fassets\u002Fuploads\u002F2021\u002F01\u002Fbanner-1554x500-1.png",[103],{"slug":104,"name":105},"wp-ignitor","WPイグナイタ",{"slug":107,"title":108,"date":109,"excerpt":110,"image":111,"categories":112},"tastewp","無料でWordPressサイトを複数作成できるWEBサービス「TasteWP」","2021-03-25T20:21:59","私が日本語翻訳に協力しているWEBサービス「TasteWP」について紹介しようと思う。 https:\u002F\u002Ftastewp.com このサービス、サインアップすることなく無料で自分用のWordPressサイトを作れるとい…","\u002Fassets\u002Fuploads\u002F2021\u002F03\u002FTasteWP_screenshot.png",[113],{"slug":74,"name":75},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":120},"monster-hunter-rise-skill-simulator","モンハンライズのスキルシミュレータを作ってみた！","2021-06-28T20:24:52","コラムで連載していたNintendo Switch版『モンスターハンターライズ』のスキルシミュレータ開発がやっと一段落して一通り完了した。いやぁ、記事書きながら同時並行で開発すると思っていた以上に時間がかかるもんだなぁ…","\u002Fassets\u002Fuploads\u002F2021\u002F06\u002Fmhrss_v100.png",[121],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":127},"comparison-of-javascript-date-libraries","JavaScriptの日時ライブラリを比較してみた","2021-07-28T22:39:19","ネイティブJavaScriptで日時を取り扱う場合、ビルトインされているDateオブジェクトを使うことになるのだが、このDateオブジェクトは取り扱いにクセが多く、直感的に日時を操作できない点でも有名である。そこで、専…",[128],{"slug":25,"name":26},[130,141,153,165,175,184,192,195,198,206,213,220],{"slug":131,"title":132,"date":133,"excerpt":134,"image":135,"categories":136},"pulllog_launched","ガチャ履歴を記録・分析できるWebサービス「PullLog」","2025-08-22T13:05:30","このたび、新しい個人開発サービスとして 「PullLog（プルログ）」 をリリースした。 URLはこちら https:\u002F\u002Fpulllog.net PullLogとは？ PullLogは、ソーシャルゲームのガチャ履歴を記録…","\u002Fassets\u002Fuploads\u002F2025\u002F08\u002Fpulllog_stats_jp.png",[137,140],{"slug":138,"name":139},"industries","プロダクト",{"slug":25,"name":26},{"slug":142,"title":143,"date":144,"excerpt":145,"image":146,"categories":147},"mockapi-php-openapi-schema-generation","モックAPIのレスポンスから OpenAPI 3.0 スキーマを自動生成するPHPツール","2025-04-17T09:31:52","私自身がそうなのですが、OpenAPI仕様書を毎回手作業で書いていて「面倒だな」と思ったことはありませんか？ そんな（私と）あなたにぴったりのツールがあります。 レスポンスの例さえ用意すれば、OpenAPI 3.0 スキ…","\u002Fassets\u002Fuploads\u002F2025\u002F04\u002Fswaggerui-preview.png",[148,151,152],{"slug":149,"name":150},"mockapi-php","MockAPI-PHP",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":154,"title":155,"date":156,"excerpt":157,"image":158,"categories":159},"ambient_playlist_customize","Ambientでメメントモリのラメントプレイヤーを作る","2023-11-30T17:32:39","「Ambient」の最新バージョン 1.2.0で実装した「疑似フェーダー」機能を使って、ソーシャルゲーム「メメントモリ」のYouTube公式チャンネルで公開されているMVを集約したラメント専用プレイヤーを作ってみた。 ラ…","\u002Fassets\u002Fuploads\u002F2023\u002F11\u002Fambient_mememori_1.png",[160,163,164],{"slug":161,"name":162},"ambient","Ambient",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":166,"title":167,"date":168,"excerpt":169,"image":170,"categories":171},"released_ambient_demo_version","Ambientメディアプレイヤーのクラウド版デモを公開","2023-11-22T13:47:36","つい先日「Ambient」の最新バージョン 1.1.0をリリースして、それに合わせてクラウド版デモサイトも公開してみた。 なお、クラウド版デモでローカルのホストコンピュータのメディアを再生するには、そのメディアファイルも…","\u002Fassets\u002Fuploads\u002F2023\u002F10\u002FAmbientMediaPlayer-typologo.png",[172,173,174],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":176,"title":177,"date":178,"excerpt":179,"image":170,"categories":180},"ambient-media-player","YouTubeと自分のPC内メディアを同時に再生できるメディアプレイヤーを作ってみた","2023-10-20T00:00:25","私はよくPCで何か作業をするときには音楽を垂れ流していることが多い。 そういう時にかける曲は、手持ちのアルバムCD等からPCに取り込んだ音源だったり、さらにはYouTubeの動画だったりとメディアや再生環境がバラバラだ。…",[181,182,183],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":185,"title":186,"date":187,"excerpt":188,"image":189,"categories":190},"what-is-the-sunorhc","Sunorhc is a date-time library for JavaScript","2021-08-25T22:55:55","Sunorhc is a lightweight library for handling dates and times for JavaScript. The library wraps a native JavaS…","\u002Fassets\u002Fuploads\u002F2021\u002F08\u002Fshutterstock_1091212919_resized.jpg",[191],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":193},[194],{"slug":25,"name":26},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":196},[197],{"slug":25,"name":26},{"slug":199,"title":200,"date":201,"excerpt":202,"image":203,"categories":204},"mhrise-skill-simulator-creation-chapter-12","モンスターハンターライズのスキルシミュレータを作ってみる！ 第12回","2021-06-21T13:11:46","今回は「マイセット登録」と護石データの「エクスポート／インポート」機能の追加をしていく。折り良く（悪く？）「FF7リメイク・インターグレード」や「FORTNITEシーズン7」が出たこともあって、そっちをプレイしてたらこ…","\u002Fassets\u002Fuploads\u002F2021\u002F04\u002Fb6ca09e9a7f6faf27641f62dabe64c6ff97b4f326aa478379e3c112aa28eb9ab.jpg",[205],{"slug":22,"name":23},{"slug":207,"title":208,"date":209,"excerpt":210,"image":203,"categories":211},"mhrise-skill-simulator-creation-chapter-11","モンスターハンターライズのスキルシミュレータを作ってみる！ 第11回","2021-06-07T14:52:31","さて、今回はユーザー個別データの管理部分を開発していく予定だが、まずその前にやっておくことがある。 新スキル「風雷合一」に対応する Ver.3.0の大型無料アップデートで追加された新スキルに「風雷合一」というのがある…",[212],{"slug":22,"name":23},{"slug":214,"title":215,"date":216,"excerpt":217,"image":203,"categories":218},"mhrise-skill-simulator-creation-chapter-10","モンスターハンターライズのスキルシミュレータを作ってみる！ 第10回","2021-06-02T00:29:10","今回は、護石管理画面の作成だ。この護石管理では、ユーザーごとに護石の登録を行う機能と、登録した護石を削除する機能を持つ仕様になる。この画面から登録した護石データはデータベースに格納するので、フロントエンド側からのリクエス…",[219],{"slug":22,"name":23},{"slug":221,"title":222,"date":223,"excerpt":224,"image":203,"categories":225},"mhrise-skill-simulator-creation-chapter-9","モンスターハンターライズのスキルシミュレータを作ってみる！ 第9回","2021-05-22T23:56:27","さて、今回はVuexによるデータ・キャッシュの実装だ。一度データベースから読み込んだデータをフロントエンド側で再利用可能なストアに格納することで、データベースへの接続回数を減らしてシステム負荷を下げるとともに、UX的な…",[226],{"slug":22,"name":23},[228,230,232,236,238,239,240,241,242,244,247,248,250,252,254,258,261],{"slug":161,"name":162,"count":229},3,{"slug":13,"name":7,"count":231},7,{"slug":233,"name":234,"count":235},"csnp","Custom Sticky Notes",2,{"slug":84,"name":85,"count":237},1,{"slug":35,"name":36,"count":229},{"slug":149,"name":150,"count":237},{"slug":64,"name":65,"count":237},{"slug":94,"name":95,"count":237},{"slug":74,"name":75,"count":243},37,{"slug":245,"name":246,"count":237},"wpqt","WP Qiita",{"slug":104,"name":105,"count":237},{"slug":22,"name":23,"count":249},29,{"slug":45,"name":46,"count":251},16,{"slug":138,"name":139,"count":253},5,{"slug":255,"name":256,"count":257},"lifelog","ライフログ",64,{"slug":259,"name":260,"count":235},"uncategorized","未分類",{"slug":25,"name":26,"count":262},45,{"type":264,"post":265},"post",{"slug":266,"title":267,"date":268,"excerpt":269,"image":203,"categories":270,"modified":272,"html":273,"tags":274,"related":290,"prev":303,"next":310},"mhrise-skill-simulator-creation-chapter-2","モンスターハンターライズのスキルシミュレータを作ってみる！ 第2回","2021-04-10T17:30:26","設計フェーズにおいて、どの設計から始めるかは、設計担当するエンジニアによってまちまちだと思う。私の場合、アプリケーション内で取り扱われるデータの体系が掴みやすくなるので、データベースを使うシステムの場合、データベースの…",[271],{"slug":22,"name":23},"2021-04-13T23:27:25","\u003Cp>　設計フェーズにおいて、どの設計から始めるかは、設計担当するエンジニアによってまちまちだと思う。私の場合、アプリケーション内で取り扱われるデータの体系が掴みやすくなるので、データベースを使うシステムの場合、データベースのテーブル設計から行うことが多い。個人的に、このデータベースモデルの設計がとても好きだということも大きいのだが、私の嗜好を抜きにしてもメリットが多い。まず、プログラム側で取り扱われるデータの「型」を暗黙的に定義していくことになるし、効率的な検索を行うためのSQLを想像しながらカラム構成を決め、シンプルなJOIN構造になるべくデータリレーション等を考えていると、頭の中におぼろげながら処理の完成形が浮かんで来る。いわば、自分の開発センスが研ぎ澄まされていくような感じがして、開発へのモチベーションを一段と高めてくれるのだ。\u003Cbr \u002F>\n　データベースが苦手だと思っている人も是非、一度このテーブル設計をやってみて欲しい。プログラミングやUIデザインといった製造フェーズとは一味変わった設計の面白みに気づけるのではないだろうか。\u003C\u002Fp>\n\u003Ch2>テーブル設計 &#8211; Design Tables\u003C\u002Fh2>\n\u003Cp>　それでは早速、今回のアプリケーションに必要となるだろう各種テーブルを設計していく。まずは武器データを格納するテーブルからだ。\u003C\u002Fp>\n\u003Ch3>武器マスターテーブル: weapons.tbl\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>カラム（物理名）\u003C\u002Fth>\n\u003Cth>カラム（論理名）\u003C\u002Fth>\n\u003Cth align=\"center\">タイプ\u003C\u002Fth>\n\u003Cth align=\"center\">属性\u003C\u002Fth>\n\u003Cth>補足\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>id\u003C\u002Ftd>\n\u003Ctd>武器ID\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, auto_increment\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>name\u003C\u002Ftd>\n\u003Ctd>武器名\u003C\u002Ftd>\n\u003Ctd align=\"center\">varchar\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>type\u003C\u002Ftd>\n\u003Ctd>武器種\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>大剣=0\u002F太刀=1\u002F片手剣=2\u002F双剣=3\u002Fハンマー=4\u002F狩猟笛=5\u002Fランス=6\u002Fガンランス=7\u002Fスラッシュアックス=8\u002Fチャージアックス=9\u002F操虫棍=10\u002Fライトボウガン=11\u002Fヘビィボウガン=12\u002F弓=13\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>rarity\u003C\u002Ftd>\n\u003Ctd>レア度\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>rank\u003C\u002Ftd>\n\u003Ctd>ランク\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>下位(High Rank)=1\u002F上位(Low Rank)=2\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>attack\u003C\u002Ftd>\n\u003Ctd>攻撃力\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>sharpness\u003C\u002Ftd>\n\u003Ctd>切れ味\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>当面は未使用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>affinity\u003C\u002Ftd>\n\u003Ctd>会心率\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null, default 0\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>defense_bonus\u003C\u002Ftd>\n\u003Ctd>防御力\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null, default 0\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>element1\u003C\u002Ftd>\n\u003Ctd>属性1\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>無属性=0\u002F火属性=1\u002F水属性=2\u002F雷属性=3\u002F氷属性=4\u002F龍属性=5\u002F毒属性=6\u002F麻痺属性=7\u002F睡眠属性=8\u002F爆破属性=9\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>element2\u003C\u002Ftd>\n\u003Ctd>属性2\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>無属性=0\u002F火属性=1\u002F水属性=2\u002F雷属性=3\u002F氷属性=4\u002F龍属性=5\u002F毒属性=6\u002F麻痺属性=7\u002F睡眠属性=8\u002F爆破属性=9\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elem1_value\u003C\u002Ftd>\n\u003Ctd>属性値1\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elem2_value\u003C\u002Ftd>\n\u003Ctd>属性値2\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot1\u003C\u002Ftd>\n\u003Ctd>スロット1\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot2\u003C\u002Ftd>\n\u003Ctd>スロット2\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot3\u003C\u002Ftd>\n\u003Ctd>スロット3\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>forging_materials\u003C\u002Ftd>\n\u003Ctd>生産素材\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>当面は未使用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>upgrade_materials\u003C\u002Ftd>\n\u003Ctd>強化素材\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>当面は未使用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>forge_funds\u003C\u002Ftd>\n\u003Ctd>生産費用\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>upgrade_funds\u003C\u002Ftd>\n\u003Ctd>強化費用\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>tree\u003C\u002Ftd>\n\u003Ctd>派生名\u003C\u002Ftd>\n\u003Ctd align=\"center\">varchar\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>rampage_skills\u003C\u002Ftd>\n\u003Ctd>百竜スキル\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>当面は未使用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>　「切れ味」カラムをJSON型にしているのは、現状ではそれぞれの切れ味ゲージの長さがわからないので、後々判明したら、\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">{ \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">red\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">20\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">orange\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">10\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">yellow\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">30\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">green\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">20\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">blue\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">15\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">white\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">5\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">parple\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FDAEB7;font-style:italic\">blank\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>──みたいにデータ化しようかと思ったからだ。「生産素材」や「強化素材」についても、必要があれば \u003Ccode>素材名:個数\u003C\u002Fcode> のJSONデータで格納できるようにしておき、素材自体は素材マスターテーブルを追加して管理できるような建付けにしてある。\u003Cbr \u002F>\n　まぁ、今回のスキル検索には切れ味や素材のデータは不要なので、カラム枠だけ確保しておけばいいだろう。\u003Cbr \u002F>\n　同様に、武器の派生を管理する必要があれば、武器派生テーブルを追加して、そこで武器ID同士の連結を管理すれば良さそうだ。それも今回の機能では不要なので、テーブル自体は用意しない。\u003C\u002Fp>\n\u003Ch3>防具マスターテーブル: armors.tbl\u003C\u002Fh3>\n\u003Cp>　次に、防具データ管理用のテーブルだ。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>カラム（物理名）\u003C\u002Fth>\n\u003Cth>カラム（論理名）\u003C\u002Fth>\n\u003Cth align=\"center\">タイプ\u003C\u002Fth>\n\u003Cth align=\"center\">属性\u003C\u002Fth>\n\u003Cth>補足\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>id\u003C\u002Ftd>\n\u003Ctd>防具ID\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, auto_increment\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>name\u003C\u002Ftd>\n\u003Ctd>防具名\u003C\u002Ftd>\n\u003Ctd align=\"center\">varchar\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>ユニーク値なのでindex候補\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>series\u003C\u002Ftd>\n\u003Ctd>シリーズ名\u003C\u002Ftd>\n\u003Ctd align=\"center\">varchar\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>part\u003C\u002Ftd>\n\u003Ctd>部位\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>頭=0\u002F胴=1\u002F腕=2\u002F腰=3\u002F脚=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>rarity\u003C\u002Ftd>\n\u003Ctd>レア度\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>rank\u003C\u002Ftd>\n\u003Ctd>ランク\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>下位=1\u002F上位=2\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>defense\u003C\u002Ftd>\n\u003Ctd>防御力\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>Lv1時の防御力\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>level\u003C\u002Ftd>\n\u003Ctd>レベル\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, default 1\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>max_level\u003C\u002Ftd>\n\u003Ctd>最大レベル\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>fire_resistance\u003C\u002Ftd>\n\u003Ctd>火耐性\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>water_resistance\u003C\u002Ftd>\n\u003Ctd>水耐性\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>thunder_resistance\u003C\u002Ftd>\n\u003Ctd>雷耐性\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ice_resistance\u003C\u002Ftd>\n\u003Ctd>氷耐性\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>dragon_resistance\u003C\u002Ftd>\n\u003Ctd>龍耐性\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot1\u003C\u002Ftd>\n\u003Ctd>スロット1\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot2\u003C\u002Ftd>\n\u003Ctd>スロット2\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot3\u003C\u002Ftd>\n\u003Ctd>スロット3\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>skills\u003C\u002Ftd>\n\u003Ctd>スキル\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>{スキルID:スキルLv,&#8230;}\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>forging_materials\u003C\u002Ftd>\n\u003Ctd>生産素材\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>当面は未使用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>forge_funds\u003C\u002Ftd>\n\u003Ctd>生産費用\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>　悩んだ末にJSON型にしたのが、スキルのカラムだ。個々の防具にバンドルされているスキルの数は、今のところ上限が4つまでなのだが、もし5つ以上スキルを持つ防具が出たときに、スロットカラムのように skill1, skill2, skill3 とカラムを分けてしまうと、カラム追加が必要になって来てしまう。テーブルスキーマの変更はシステム全体へのインパクトがけっこう大きいので、最初から可変データに対応できるようにしておいた方が無難だろうと考えた結果である。JSON型はSQL上での取り扱いに難があるので、あまり多用したくなかったのだが、ここは仕方ないと割り切った。\u003C\u002Fp>\n\u003Ch3>護石マスターテーブル: talismans.tbl\u003C\u002Fh3>\n\u003Cp>　次は護石管理用テーブルだ。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>カラム（物理名）\u003C\u002Fth>\n\u003Cth>カラム（論理名）\u003C\u002Fth>\n\u003Cth align=\"center\">タイプ\u003C\u002Fth>\n\u003Cth align=\"center\">属性\u003C\u002Fth>\n\u003Cth>補足\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>id\u003C\u002Ftd>\n\u003Ctd>護石ID\u003C\u002Ftd>\n\u003Ctd align=\"center\">bigint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, auto_increment\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>name\u003C\u002Ftd>\n\u003Ctd>護石名\u003C\u002Ftd>\n\u003Ctd align=\"center\">varchar\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>rarity\u003C\u002Ftd>\n\u003Ctd>レア度\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot1\u003C\u002Ftd>\n\u003Ctd>スロット1\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot2\u003C\u002Ftd>\n\u003Ctd>スロット2\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot3\u003C\u002Ftd>\n\u003Ctd>スロット3\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 0\u003C\u002Ftd>\n\u003Ctd>スロットなし=0\u002Fスロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>skills\u003C\u002Ftd>\n\u003Ctd>スキル\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>{スキルID:スキルLv,&#8230;}\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>　今回のモンハンライズでは護石は自分で生産することになったため、護石に付与されるスキルやスロットはユーザー毎に千差万別となる。このテーブルには都度ユーザーの護石を登録できるようにして、それを再利用することを想定している。\u003C\u002Fp>\n\u003Ch3>装飾品マスターテーブル: decorations.tbl\u003C\u002Fh3>\n\u003Cp>　次に、装飾品管理用のテーブルだ。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>カラム（物理名）\u003C\u002Fth>\n\u003Cth>カラム（論理名）\u003C\u002Fth>\n\u003Cth align=\"center\">タイプ\u003C\u002Fth>\n\u003Cth align=\"center\">属性\u003C\u002Fth>\n\u003Cth>補足\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>id\u003C\u002Ftd>\n\u003Ctd>装飾品ID\u003C\u002Ftd>\n\u003Ctd align=\"center\">bigint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, auto_increment\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>name\u003C\u002Ftd>\n\u003Ctd>装飾品名\u003C\u002Ftd>\n\u003Ctd align=\"center\">varchar\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>ユニーク値なのでindex候補\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>rarity\u003C\u002Ftd>\n\u003Ctd>レア度\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>slot\u003C\u002Ftd>\n\u003Ctd>スロット\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 1\u003C\u002Ftd>\n\u003Ctd>スロット[1]=1\u002Fスロット[2]=2\u002Fスロット[3]=3\u002Fスロット[4]=4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>skills\u003C\u002Ftd>\n\u003Ctd>スキル\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>{スキルID:スキルLv,&#8230;}\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>forging_materials\u003C\u002Ftd>\n\u003Ctd>生産素材\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>当面は未使用\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>forge_funds\u003C\u002Ftd>\n\u003Ctd>生産費用\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>　装飾品とは加工屋で生産できる「○○珠」と呼ばれる装備に着脱できるスキルの素のことだ。基本的に装飾品1個で1スキルの1レベルのみ発動されるが、前作モンハンワールドでは複合珠と呼ばれる一度に2レベル以上を発動できたり、複数スキルを同時に発動できる装飾品が追加されていたので、今作のライズでも将来的にそのような装飾品が登場することを見越して、複合スキル構成にも対応できるように「スキル」カラムはJSON型にしてある。\u003C\u002Fp>\n\u003Ch3>スキルマスターテーブル: skills.tbl\u003C\u002Fh3>\n\u003Cp>　最後に、スキル管理用のテーブルだ。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>カラム（物理名）\u003C\u002Fth>\n\u003Cth>カラム（論理名）\u003C\u002Fth>\n\u003Cth align=\"center\">タイプ\u003C\u002Fth>\n\u003Cth align=\"center\">属性\u003C\u002Fth>\n\u003Cth>補足\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>id\u003C\u002Ftd>\n\u003Ctd>スキルID\u003C\u002Ftd>\n\u003Ctd align=\"center\">int\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, auto_increment\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>name\u003C\u002Ftd>\n\u003Ctd>スキル名\u003C\u002Ftd>\n\u003Ctd align=\"center\">varchar\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>ユニーク値なのでindex候補\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>description\u003C\u002Ftd>\n\u003Ctd>スキル概要\u003C\u002Ftd>\n\u003Ctd align=\"center\">text\u003C\u002Ftd>\n\u003Ctd align=\"center\">not null\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>max_lv\u003C\u002Ftd>\n\u003Ctd>最大レベル\u003C\u002Ftd>\n\u003Ctd align=\"center\">tinyint\u003C\u002Ftd>\n\u003Ctd align=\"center\">unsigned, not null, default 1\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>status\u003C\u002Ftd>\n\u003Ctd>レベル別ステータス\u003C\u002Ftd>\n\u003Ctd align=\"center\">json\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003C\u002Ftd>\n\u003Ctd>{スキルLv:内容,&#8230;}\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Cp>　とりあえず、これらのテーブルがあれば、スキルの検索ができるだろう。まぁ、この時点での設計は完全である必要はない。実際に処理やUIを開発していく過程で、不足しているカラムやテーブルが見つかったら、追加すれば良いだけだからだ。また、検索性能に影響を及ぼすインデックスについても、実際のSQLを作成する際にパフォーマンス・チューニングをしながら適宜追加・削除して行く方向で問題ない。\u003Cbr \u002F>\n　リリース前であれば、ぶっちゃけゼロから全テーブルを作り替えてしまっても構わない（開発コストが溢れない限り、そして納期に間に合いさえすれば、だが……）。ただし、一度リリースしてしまうと、そんな緩いことはできなくなる。リリース後にテーブル構造を変更するのはデータ破損や消失をはじめとする、システム障害のリスクが高くなるためだ。特に業務用アプリケーションの場合、サービスを一時停止してのメンテナンス対応を入れる等、ステークホルダーを巻き込んで大事になることもしばしばある。\u003Cbr \u002F>\n　\u003Cbr \u002F>\n　今回は趣味アプリなので、その辺はまったく気にしないで気楽に作れるのが強みだ。ただ、リスクが低いと云っても、後からテーブル構造を変更するのは影響範囲が大きいのでなるべく避けるのがベターである。もし、仕様があいまいなデータを取り扱うような場合は、今回の設計でも採用したようにデータの取り扱いが柔軟なJSON型カラムを利用したり、あらかじめ拡張用のカラムを準備しておく等の対策を講じておくと、安心である。\u003C\u002Fp>\n\u003Ch2>データベースとテーブルの作成\u003C\u002Fh2>\n\u003Cp>　さて次に、今回のアプリケーション用にMySQLデータベースに専用のデータベースを作る。JSON型のカラムを取り扱うので、MySQLは5.7以降のバージョンが必須だ。\u003Cbr \u002F>\n　それでは、早速MySQLにログインして、データベースを作成してみる。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">mysql\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> CREATE\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DATABASE\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> IF\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> NOT\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> EXISTS\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> mhr_simulator_db \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">CHARACTER\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> SET\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> utf8mb4 \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">COLLATE\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> utf8mb4_general_ci;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Query OK, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> row\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> affected (\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">00\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sec)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">mysql\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> use\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> mhr_simulator_db;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">Database\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> changed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　データベースを作った後は \u003Ccode>use データベース名\u003C\u002Fcode> で利用するデータベースにマウントする必要がある。あとは前章のスキーマを元にしてテーブル作成用のCREATE TABLE文を作っていく。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">mysql\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> CREATE\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> TABLE\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> `weapons`\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `id`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> AUTO_INCREMENT COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'武器ID'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `name`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> varchar\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">255\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'武器名'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `type`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'武器種'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `tree`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> varchar\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">255\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'派生名'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `rarity`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'レア度'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `rank`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'ランク'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `attack`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'攻撃力'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `sharpness`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> json\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'切れ味'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `affinity`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'会心率'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `defense_bonus`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'防御力'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `element1`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'属性1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `element2`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'属性2'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `elem1_value`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'属性値1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `elem2_value`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'属性値2'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `slot1`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'スロット1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `slot2`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'スロット2'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `slot3`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'スロット3'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `rampage_skills`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> json\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'百竜スキル'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `forging_materials`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> json\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'生産素材'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `upgrade_materials`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> json\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'強化素材'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `forge_funds`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'生産費用'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `forge_with_money`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'購入費用'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `upgrade_funds`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'強化費用'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `rollbackable`\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> bit\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> b\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> COMMENT \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'ロールバック可否'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  PRIMARY KEY\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">`id`\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  KEY\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> `name`\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">`name`\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">) ENGINE\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">InnoDB \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">DEFAULT\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> CHARSET\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">utf8mb4 COMMENT\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'武器マスター'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Query OK, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> rows\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> affected (\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">02\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sec)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　ここでは武器マスターテーブルのみCREATE TABLE文を紹介しているが、全てのテーブルのCREATE TABLE文が知りたい場合はこちらの\u003Ca href=\"https:\u002F\u002Fgist.github.com\u002Fka215\u002Fd5ddfb8c78aadb1439c1a9b1875a32e5\">Gistページ\u003C\u002Fa>を参照して欲しい。\u003Cbr \u002F>\n　これで、アプリケーション用のデータベースとテーブルが出来ているハズなので、構成を確認してみよう。テーブル情報の確認には \u003Ccode>desc テーブル名\u003C\u002Fcode> のコマンド（クエリ）を使う。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">mysql\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> desc\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weapons;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">-------------------+---------------------+------+-----+---------+----------------+\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| Field             | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">Type\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">                | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">Null\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">Key\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">Default\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> | Extra          |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">-------------------+---------------------+------+-----+---------+----------------+\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| id                | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   | PRI | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    | auto_increment |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">              | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">varchar\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">255\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)        | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   | MUL | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">type\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">              | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| tree              | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">varchar\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">255\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)        | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| rarity            | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| rank              | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| attack            | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| sharpness         | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">json\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">                | YES  |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">affinity\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">          | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)          | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| defense_bonus     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)             | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| element1          | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| element2          | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| elem1_value       | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">       |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| elem2_value       | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">       |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| slot1             | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">       |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| slot2             | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">       |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| slot3             | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">tinyint\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">       |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| rampage_skills    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">json\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">                | YES  |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| forging_materials | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">json\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">                | YES  |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| upgrade_materials | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">json\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">                | YES  |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| forge_funds       | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| forge_with_money  | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">       |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| upgrade_funds     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">11\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">) unsigned    | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NULL\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| rollbackable      | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">bit\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)              | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">NO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">   |     | b\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'1'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">    |                |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">-------------------+---------------------+------+-----+---------+----------------+\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">24\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> rows\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> in\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> set\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">00\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sec)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　意図したテーブル設計通りの構造になっているのでOKだ。\u003Cbr \u002F>\n　さて、ここからはSQLの基礎的な話になる。\u003Cbr \u002F>\n　この段階では各テーブルにデータが入っていないので、何かサンプルデータを登録してみる。テーブルにデータ（レコード）を登録する場合は、INSERT文を使う。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">INSERT INTO\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weapons (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  name\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">type\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, tree, rarity, rank, attack, sharpness, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">affinity\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, defense_bonus,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  element1, element2, elem1_value, elem2_value,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  slot1, slot2, slot3, rampage_skills,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  forging_materials, upgrade_materials, forge_funds, forge_with_money, upgrade_funds, rollbackable\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">VALUES\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'カムラノ鉄大剣Ⅰ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'カムラ派生'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">50\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">null\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">JSON_ARRAY\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'攻撃力強化Ⅰ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'会心率強化Ⅱ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'防御力強化Ⅰ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  null\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">null\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">300\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">600\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, false\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'カムラノ鉄大剣Ⅱ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'カムラ派生'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">60\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">null\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">JSON_ARRAY\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'攻撃力強化Ⅰ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'会心率強化Ⅱ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">'防御力強化Ⅰ'\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  null\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">null\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">200\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, true\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Query OK, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> rows\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> affected (\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">00\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sec)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Records: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">  Duplicates: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">  Warnings: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　INSERT文で覚えておくべきなのは、サロゲートキーを持つ（プライマリキーが自動採番型である）テーブルにデータを追加する場合に、サロゲートキーであるカラム（上記武器マスターテーブルでのidカラム）を指定しないことで、データベース側で重複しない最適な番号を自動的に付与してくれるということだ。カラム自体に自動採番（auto_increment）属性を持っていないPostgreSQLのようなデータベースもあるが、そういうデータベースだったとしてもシーケンス属性を利用することで同じ動きを実現できる。\u003Cbr \u002F>\n　次に、登録したデータを参照してみる。今回のアプリケーションではこの参照クエリであるSELECT文が処理のキモになって来るので、特に重要である。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">mysql\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> SELECT\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> id,\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">,attack \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">FROM\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weapons \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">WHERE\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> rollbackable \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> true;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">----+--------------------------+--------+\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">| id | \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">                     | attack |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">----+--------------------------+--------+\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">|  \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">2\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> | カムラノ鉄大剣Ⅱ          |     \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">60\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D\">----+--------------------------+--------+\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> row\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> in\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> set\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">00\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sec)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　なお、テーブル内のデータ件数が知りたい場合は、\u003Ccode>SELECT COUNT(id) FROM weapons;\u003C\u002Fcode>のようにプライマリキーをカウントするクセをつけよう。よく巷では \u003Ccode>COUNT(*)\u003C\u002Fcode> のようにカラム全体を取得するワイルドカードを利用したクエリが紹介されているのを見かけるが、内部的にメモリ効率が悪いので利用は控えるべきである。暗黙的にインデックス対象となっているプライマリキーをカウントするのが正しいのだ。基本的に、人力でコマンドラインからデータベースをメンテナンスする時以外に、アプリケーション側から発行するクエリ内にワイルドカード（*）を使用しないことがデータベースのパフォーマンスを維持するコツの一つであると私は信じている。\u003Cbr \u002F>\n　話が逸れたが、続いてデータを更新してみる。データ更新にはUPDATE文を使う。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">mysql\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> UPDATE\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weapons \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">SET\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> rollbackable \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> false \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">WHERE\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> id \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 2\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Query OK, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> row\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> affected (\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">00\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sec)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">Rows\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> matched\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">  Changed: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">  Warnings: \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　これは、武器ID:2のデータの「ロールバック可否」を変更するクエリだ。更新されたかチェックするために、前述のSELECT文をもう一度実行してみると、今度は「カムラノ鉄大剣Ⅱ」が取得できなくなっているはずだ。\u003Cbr \u002F>\n　最後に、サンプルデータを削除しておく。テーブル内のデータを個別に削除する場合はDELETE文を使うが、DELETE文で削除した場合、そのテーブルのデータ番号であるidカラム（プライマリキー）の連番のインデックス（次にデータを追加した際に自動発行されるデータ番号）が初期化されない。今回はその連番インデックスも初期化しておきたいので、TRUNCATE文でテーブル自体を初期化する。\u003C\u002Fp>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">mysql\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> TRUNCATE\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> TABLE\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> weapons;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Query OK, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> rows\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> affected (\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">0\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">01\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sec)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>　これでデータベースの準備はとりあえず完了だ。\u003Cbr \u002F>\n　今回紹介したINSERT文以降のSQL文はMySQL以外のDBMSでもほぼ共通で使えるので、データベースの基礎知識として覚えておくことをオススメする。私見にはなるが、SQLが使えないプログラマーは実際の開発シーンでは頼りにならないことが多いので、CRUDと呼ばれる基礎的なクエリ（INSERT, SELECT, UPDATE, DELETE）だけでも使えるようにしておくと良いだろう。\u003C\u002Fp>\n\u003Ch2>データの投入について\u003C\u002Fh2>\n\u003Cp>　作成したデータベースに「\u003Cstrong>いつ\u003C\u002Fstrong>」「\u003Cstrong>どのように\u003C\u002Fstrong>」「\u003Cstrong>どんな\u003C\u002Fstrong>」データを投入するかということも考えておかなければならない。今後、処理を開発するにあたっては何かしらのデータがデータベースに入っていないとテストが出来ないので、最低でも単体テスト用に断片的なデータが必要になって来る。さらに、結合テストの際にはある程度の量のデータが必要で、総合テスト（E2Eテスト：End To End Test）時にはほぼ本番運用と変わらないデータが欲しい。\u003Cbr \u002F>\n　つまり、一般的なデータの投入タイミングは、下記のようになる。\u003C\u002Fp>\n\u003Ch3>単体テスト（ユニットテスト）時\u003C\u002Fh3>\n\u003Cp>　機能やモジュールを開発するために必要な、最小限度のデータ量のダミーデータ。\u003Cbr \u002F>\n　例えば、データを検索するモジュールならば、最低限検索条件にマッチするデータとマッチしないデータの両方がなければ正常動作を確認できないだろう。\u003Cbr \u002F>\n　この時点でのデータ投入は、開発している機能やモジュールの特性に合わせて都度々データを準備する方式でも構わない。また、この時点で投入されたデータは未完成の処理等によって破壊される可能性が高いので、継続的にデータの初期化・再投入ができるような手順を確立しておくことも重要だ。\u003C\u002Fp>\n\u003Ch3>結合テスト時\u003C\u002Fh3>\n\u003Cp>　結合テストとは単体テストを通過したモジュールやコンポーネントが、他のモジュールやコンポーネントと連携して動作する際の動作を検証するためのテストである。この時点で必要になって来るデータ量は単体テスト時よりも増加する。\u003Cbr \u002F>\n　例えば、ページネーション付きデータ一覧を表示するコンポーネントを検証するためには、ページネーションが発生する閾値を超える量のデータがないといけない。\u003Cbr \u002F>\n　この時点でのデータ投入は、ある程度本番運用に近い形でのデータ精度とデータ量が求められる。また、単体テスト時と同様に、継続的なデータ初期化・再投入の必要性も高い。\u003C\u002Fp>\n\u003Ch3>総合テスト（E2Eテスト）時\u003C\u002Fh3>\n\u003Cp>　この時点でのテストは、ほとんど本番運用と変わらない。エンドユーザー目線で、アプリケーション上のあらゆる操作を行い、動作やパフォーマンスに支障がないかを検証することになる。この時点で必要になるデータはできる限り本番用の実データに近い精度と量が求められる。\u003Cbr \u002F>\n　しかし、個人情報などを取り扱うシステム等の場合、実データをそのままテストに利用できないため、特定の個人情報（姓名や住所、メールアドレス等）をマスク（隠蔽）する等のデータ加工が必要になることもある。\u003Cbr \u002F>\n　このテストが完了した後は、データを初期化し、本番運用用の正式なデータを投入することになる。\u003C\u002Fp>\n\n\u003Cp>　結論的に、もし単体テスト時点から総合テスト並みのデータもしくは本番運用時用のデータが準備できるのならば、そのデータを投入してしまうのがベストである。しかし、数万件以上あるような大量なデータが対象だった場合などは、データの初期化・再投入作業のパフォーマンスが悪いことも多いので、その時点でどの程度のデータを投入するのがベストなのかは開発効率とのトレードオフで決めるのが良いだろう。\u003C\u002Fp>\n\u003Cp>　まぁ、今回開発するアプリケーションには特に配慮すべき特別な情報は含まれていないうえ、そこまでデータ量も多くないので、最初から本番運用時と同等のデータを準備してしまうのがベストだろう。さらには、管理側の機能として実装を想定しているデータを一括登録するための機能を一番最初に開発することで、以降のデータ投入運用が楽になるだろう。\u003C\u002Fp>\n\u003Cp>　ということで、今回はここまで。\u003Cbr \u002F>\n　なお、業務用システムとかの場合は、データベース設計後には設計のレビューを行って、ステークホルダーの了承を得てからデータベースの構築という流れになる。まぁ、リスクヘッジの儀式として必要なのは重々承知しているけれども、正直面倒なんだよねぇ……。その点、個人の趣味的開発にはそんなまどろっこしい工程は発生しないのだ（笑）。\u003Cbr \u002F>\n　ちゅーわけで、\u003Ca href=\"\u002Fmhrise-skill-simulator-creation-chapter-3\">次回\u003C\u002Fa>はアプリケーション本体の設計をサクッと終わらせる予定。\u003C\u002Fp>\n",[275,278,281,284,287],{"slug":276,"name":277},"mhrise","MHRise",{"slug":279,"name":280},"%e3%82%b7%e3%83%9f%e3%83%a5%e3%83%ac%e3%83%bc%e3%82%bf%e3%83%bc","シミュレーター",{"slug":282,"name":283},"%e3%82%b9%e3%82%ad%e3%83%ab","スキル",{"slug":285,"name":286},"%e3%83%a2%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%bc%e3%83%8f%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%a9%e3%82%a4%e3%82%ba","モンスターハンターライズ",{"slug":288,"name":289},"%e3%83%a2%e3%83%b3%e3%83%8f%e3%83%b3%e3%83%a9%e3%82%a4%e3%82%ba","モンハンライズ",[291,294,297,300],{"slug":199,"title":200,"date":201,"excerpt":202,"image":203,"categories":292},[293],{"slug":22,"name":23},{"slug":207,"title":208,"date":209,"excerpt":210,"image":203,"categories":295},[296],{"slug":22,"name":23},{"slug":214,"title":215,"date":216,"excerpt":217,"image":203,"categories":298},[299],{"slug":22,"name":23},{"slug":221,"title":222,"date":223,"excerpt":224,"image":203,"categories":301},[302],{"slug":22,"name":23},{"slug":304,"title":305,"date":306,"excerpt":307,"image":203,"categories":308},"lets-create-a-skill-simulator-for-monster-hunter-rise","モンスターハンターライズのスキルシミュレータを作ってみる！ 第1回","2021-04-09T11:24:23","Nintendo Switch用『モンスターハンターライズ』が発売されて2週間が経った。 今回の「モンハンライズ」は、前作のワールドと比べると、かなり難易度が易しいという印象だ。すでに現バージョン1.xでのハンターラ…",[309],{"slug":22,"name":23},{"slug":311,"title":312,"date":313,"excerpt":314,"image":203,"categories":315},"mhrise-skill-simulator-creation-chapter-3","モンスターハンターライズのスキルシミュレータを作ってみる！ 第3回","2021-04-11T17:29:43","今回はアプリケーションの基本設計を行っていく。 第1回でまとめた要件定義の内容を簡単な図にしてみると、 ──こんな感じになる。処理の流れとしては、フロントエンド側のページ（UI）は「Vue.js」と「Vuetify」…",[316],{"slug":22,"name":23},1793391397071]