[{"data":1,"prerenderedAt":317},["ShallowReactive",2],{"$ft6jtkd6xhw3c":3,"$fdukgmxkzrbsf":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-3","モンスターハンターライズのスキルシミュレータを作ってみる！ 第3回","2021-04-11T17:29:43","今回はアプリケーションの基本設計を行っていく。 第1回でまとめた要件定義の内容を簡単な図にしてみると、 ──こんな感じになる。処理の流れとしては、フロントエンド側のページ（UI）は「Vue.js」と「Vuetify」…",[271],{"slug":22,"name":23},"2021-04-15T00:25:24","\u003Cp>　今回はアプリケーションの基本設計を行っていく。\u003Cbr \u002F>\n　第1回でまとめた要件定義の内容を簡単な図にしてみると、\u003C\u002Fp>\n\u003Cp>\u003Cimg data-recalc-dims=\"1\" decoding=\"async\" src=\"\u002Fassets\u002Fuploads\u002F2021\u002F04\u002Fmhr_scheme.png\" alt=\"アプリケーション設計\" \u002F>\u003C\u002Fp>\n\u003Cp>──こんな感じになる。処理の流れとしては、フロントエンド側のページ（UI）は「Vue.js」と「Vuetify」で作成・制御される。そして、ページ内で発生したユーザーからの要求は「Axios」を使って非同期でバックエンドに送信する。バックエンド側では、「PHP 8」でユーザーのリクエストを処理して、必要があれば「MySQL」データベースに問い合わせを行う。データベースの応答結果は、再び「PHP 8」で最適化され、「Axios」のレスポンスとして返信する。返信されたレスポンスは「Vue.js」と「Vuetify」でUIへ適用される。\u003Cbr \u002F>\n　まぁ、今では一般的なWEBアプリケーションの建付けなので、あまり特筆するべきものはないんだよね……。\u003C\u002Fp>\n\u003Cp>　開発規模の小さい今回のような趣味的なツールであれば、アプリケーション設計はこれだけでもさほど困らない。しかしながら、一般的な開発では、これだけだと設計としてはあまりにも抽象的で、開発着手するには情報が少な過ぎるだろう。\u003Cbr \u002F>\n　では、アプリケーションの設計フェーズでは他にどのような成果物が期待されるのかを紹介していこう。\u003C\u002Fp>\n\u003Ch2>システム設計\u003C\u002Fh2>\n\u003Cp>　開発するアプリケーションの設置する場所や環境の設計のことだ。どういう形式でアプリケーションを提供するのかによって設計内容は大きく異なる。サーバが必要であれば、ベンダーを選定し、ネットワーク構成を決め、各サーバの設定や用途を定義するなど、およそインフラ周りの全てを設計書としてまとめる。\u003Cbr \u002F>\n　この設計周りは、大抵は開発系エンジニアではなくネットワークエンジニアが担当することになる。開発側からはアプリケーションで取り扱うデータ量と、見込まれるフロントエンド側の負荷、採用を予定している要素技術（DBはMySQL、WEBサーバはNginx、言語はPHP、node.jsなど）等をあらかじめ伝えておき、準備すべきサーバのスペック等を両者で詰めていくのが理想である。\u003Cbr \u002F>\n　私の経験上、何気に同一社内でも開発系とネットワーク系のエンジニアが分断しているケースがままあるので、共同歩調を取るには、どちらのエンジニアとも日頃から仲良くしておくと困らない。\u003Cbr \u002F>\n　ちなみに、今回の開発では既に使用しているWEBサーバ／データベース内に追加する形になるので、改めてシステム設計をする必要はない。\u003C\u002Fp>\n\u003Ch2>データベース設計\u003C\u002Fh2>\n\u003Cp>　すでに前回実施したアプリケーションで取り扱うデータモデルの設計である。データベースを利用するかどうかに関わらず、取り扱うデータがあるアプリケーションであればそのデータの仕様を取りまとめておくことが必要になる。\u003Cbr \u002F>\n　この設計についても、私の経験則上、データベースに強いエンジニアに依頼することが多いように思われる。本来であれば、実際に処理を開発するエンジニアがひな形を作り、データベースに詳しいエンジニアが監修するような体制が理想的である。\u003C\u002Fp>\n\u003Ch2>画面設計\u003C\u002Fh2>\n\u003Cp>　対人向けのユーザインターフェース（UI）が存在するアプリケーションの場合、この画面設計が必要になって来る。この画面設計には、アプリケーション全体の画面遷移の概要を説明する「画面遷移設計」や、各画面ごとのコンポーネント配置を説明する「構成要素設計」、見た目の画面レイアウトを定義する「UI／UXデザイン」などの設計書がある。これらの設計については、WEBデザイナーに依頼されることが多いが、デザインのひな形になる「構成要素設計」や「画面遷移設計」などはシステム全体を把握しているエンジニア側から提示してあげる必要があるだろう。\u003Cbr \u002F>\n　また、この部分の設計書はメンテナンスが大変な文書化を行うよりも、モックアップとして作成してしまうという手段もある。デザイン関連の設計って、何気にステークホルダー間でのイメージの共有化がしづらいので、実際にモックとして作成して、レイアウトや、コンポーネントの動き、画面遷移まで確認してもらい、承認を受けたモックアップデータそのものを成果物にしてしまう方が効率的なのだ。\u003Cbr \u002F>\n　今回の開発でも、画面設計についてはモックアップをベースにして進めていくので、詳しくはモックアップ作成の回で説明する。\u003C\u002Fp>\n\u003Ch2>インターフェース設計\u003C\u002Fh2>\n\u003Cp>　これは、外部連携用の仕様を定義するものだ。開発するアプリケーションが自己完結型ではなく、他のサブシステムや、外部APIと接続を行ってデータのやり取りをするようなモノだった場合、ここでそれらの連携仕様を設計していく。\u003Cbr \u002F>\n　例えば、各種決済連携や、SMS利用による二要素認証などだ。これらは、連携先のシステムにAPIが準備されているのであれば、API仕様に応じたデータを自前のアプリケーション側から送出して、応答を取得できる仕組みを作らなければならない。APIがない場合だと、メールで連携する（空メール等）・データファイルをFTPする（帳票系システム等）・スクレイピングするなど、連携方式は連携先に応じて様々である。\u003C\u002Fp>\n\u003Ch2>業務・運用設計\u003C\u002Fh2>\n\u003Cp>　こちらはちょっと毛色が違って、開発が完了してアプリケーションがリリースされた後に発生する業務の設計だ。例えば、完成したアプリケーションを運用するWEB担当者向けの「操作マニュアル」や、各種ログのローテーション仕様、定時バッチ処理のスケジューリング、システム・メンテナンスやバージョンアップ等の中長期的なスケジュールなどが含まれる。\u003Cbr \u002F>\n　これらは初期の設計フェーズから漏れても開発フェーズにインパクトがないので、設計後の開発や試験フェーズあたりから同時並行的に進捗されることもある。\u003C\u002Fp>\n\u003Ch2>処理設計\u003C\u002Fh2>\n\u003Cp>　「内部設計」や「詳細設計」とも呼ばれる、開発するエンジニアにとって重要な、実際の開発方式に関わる設計だ。コーディング規約の策定や、処理フロー、クラス定義、I\u002FO設計、CRUD設計など、必要な設計は多岐に渡る。この設計をどの粒度まで行うかによって、開発フェーズ後における完成度に如実に差が出る。\u003Cbr \u002F>\n　ただし、個人的には、この設計に時間をかけるのは非効率だと思っている（有益ではあるのだが）。クライアント側から納品物として「詳細設計書」を求められない限りは、こんな設計文書は作らず、さっさとコードを書き始めた方がいいと思うのだ。今時なら、コード内にメタ情報としてドキュメント的な仕様を書いていける（PHP 8ならアトリビュート、PHP 7以前ならPHP Doc等、JavaScriptならESDoc等）ので、もし必要ならコーディング後にそれらを詳細設計書として出力してしまえば事足りるのではないだろうか。\u003Cbr \u002F>\n　確かに、きちんと設計してから作った処理は、不具合が少ないし、見やすいし、処理同士の連携もスムーズだ。しかし、この設計に時間を費やすと、プロジェクト全体のスピード感は失われる。もしも、失われたスピード感が、優れた処理設計によって、後続の開発フェーズと試験フェーズの工期短縮を促進してくれるのであれば、処理設計に注力すべきだろう。でも、私の経験則上、そんなケースに巡り合ったことがない。しかも、実務案件で設計フェーズに潤沢な時間が与えられるようなケースもまれなので、そんな切迫した状況下で優れた設計を行えというのがそもそも矛盾している。たとえ、重厚長大な詳細設計書を書き上げたとしても、クライアントは納品時点ではほぼ読んでくれないし、役に立つのは、せいぜい不具合が発生した際に処理仕様を調べる時ぐらいではないだろうか……（やばい、だいぶ毒気づいて来たな）。\u003C\u002Fp>\n\u003Cp>　私のように設計自体は好きだけど、設計書のドキュメンテーションは面倒だから好きじゃないというエンジニアは多いと思うが、そういう人にも強制的に設計を出させる開発方式もある。「\u003Cstrong>テスト駆動開発（Test-Driven Development: TDD）\u003C\u002Fstrong>」だ。これは、ある処理を開発する前に、その処理の動作テスト（ユニットテスト）を書くという開発方式で、処理設計と実開発の行程を分断せずに、書かれた動作テストをその処理自体の設計書に転用しやすいというものだ。一時期、私もこれをやっていたが、テスト書くのが非常に億劫なことと、全体の開発スピードがやたら落ちることから、最近はやっていない。処理が複雑になってくると、スタブとかモックとかを準備しなくちゃテストができないこともあり、なんかテストのためのコーディングを延々と繰り返していたら、「あれ、結構コード書いたけど、作らなきゃいけない本体を作ってないじゃん」って、途方もない疲労感に襲われたからだ。気分的にあまりやりたくない開発方式なんだが、開発手順としての有効性は抜群に良いので、個人的な開発をする時でも、これをやるかどうかいつも悩んでいる。\u003C\u002Fp>\n\u003Cp>　ちょっと話が逸れるが、オープンソース界隈を歩いていると、カオスなコードに出会うことが結構多い。その後、プロダクトのリリースを継続してウォッチして行くと、どんどん洗練されたコードになっていく。世に出たアプリケーションは、使われる人たちによって改善を促され、それが作者のエンジニアとしてのレベルアップに繋がり、日々新たな技術が登場することによって、どんどん効果的で優れたコードにブラッシュアップされていくのだ。設計はあるに越したことはないが、アプリケーションが実現しなければならない根本の目標を達成できさえすれば、そこまで気にせずにカオスなコード書いてもイイのではないだろうか。\u003Cbr \u002F>\n　真摯に設計に取り組んでいるエンジニアの方々には失礼千万なことは承知のうえであえて云わせてもらえば、設計を重要視する論調って、私にしてみればプレイ中の失敗を恐れるあまり、前もって言い訳を用意している偽善的なポーズに思えるのだ。よくメイド・イン・ジャパンのプロダクトの生産性が劣悪な理由の一つに、こういう「手順」や「セオリー」にあまりにも囚われ過ぎて、最初に完璧を求めすぎるからだと揶揄されるが、その縮図こそが、プロダクト開発シーンの設計フェーズの在り方にあるように思うのだ。\u003Cbr \u002F>\n　ぶっちゃけ、初めて世に出すバージョンは「\u003Cstrong>動きゃイイじゃん！\u003C\u002Fstrong>」というのが、私の持論である（その後、継続的にリファクタリングしていくのが大前提になるんだけどね……）。\u003C\u002Fp>\n\u003Cp>　閑話休題、業務でシステム開発している方々からはだいぶ批判を受けそうでもあるので、処理設計の一般論についてはここまでにしておく（笑）\u003Cbr \u002F>\n　今回開発するアプリケーションは私一人で製造するモノでもあり、事前に処理設計をして第三者的な目線からアドバイスを貰えるものでもないので、スキップする。ただ、せっかくPHP 8を使うので、アトリビュートで各処理にメタ付けだけはしておこうかと思っている。　\u003C\u002Fp>\n\u003Ch2>試験計画\u003C\u002Fh2>\n\u003Cp>　テスト設計とも呼ばれる。一般的に、単体テストは含まず、開発がひと段落した後の結合試験の計画になる。テストスケジュールの策定や、テスト項目表・テスト成績表などの作成が含まれる。ぶっちゃけ、前述の処理設計をすっとばしても、この試験計画が入念に作成されていれば、プロダクト全体の完成度を向上させられる（改修フェーズが増えて試験フェーズが長引く可能性はあるが）。かといって、この試験計画をおざなりにすると、いくら優秀な設計を元に開発されても、プロダクト全体の完成度は低下することは覚えておく必要がある。\u003Cbr \u002F>\n　あと、忘れがちなのがセキュリティ試験と負荷試験だ。どちらもインフラの設定等にも絡んで来たりするので、関係各位と協力して試験を行っておかないと痛い目を見る。特に、正式運用後に想定以上のデータ量によるシステムパフォーマンスの低下などが発生すると、サービスに対しての信頼性が失墜して、最悪サービス自体が潰れることにもなりかねないのだ。\u003C\u002Fp>\n\u003Ch2>マスタースケジュール\u003C\u002Fh2>\n\u003Cp>　上記の他にも、設計書と呼ばれる文書は枚挙にいとまがないが、それらすべての作成工期等を含んで、プロジェクト全体の行程をスケジュール化したものが、マスタースケジュールである。マスタースケジュールの各工程には、リスク管理として費用の許す限り、バッファーを積んで置く必要がある。\u003Cbr \u002F>\n　このスケジュール策定や実際の管理を行うのが、プロジェクト・マネジャー（PM）と呼ばれる職掌の人で、この人はプロジェクトにおける全貌を常に把握しておく必要がある。つまり、その人に訊けば、プロジェクトのことは何でもわかるという体制にしておくことが重要だ。\u003C\u002Fp>\n\n\u003Cp>　今回はここまで。\u003Cbr \u002F>\n　私個人の嗜好や意見がふんだんに盛り込まれた内容になっているので、一般的な業務フローにはそぐわないケースも多々あるかと思う。\u003Cbr \u002F>\n　くれぐれも、\u003C\u002Fp>\n\u003Cp>PM「あまり時間が割けないんですが、詳細設計お願いしますね」\u003Cbr \u002F>\nエンジニア「もちろんです……」\u003Cbr \u002F>\nエンジニア「だが断る」\u003Cbr \u002F>\nPM「ナニッ！？」\u003C\u002Fp>\n\u003Cp>──という、岸部露伴的なやりとりは控えよう（笑）\u003C\u002Fp>\n\u003Cp>　いやはや、業務として開発に携わると、ホント色々と制限がかけられてしまってなかなか「楽しい」コード製造のフェーズに入れないのが常だ。だからこそ、趣味で開発を行う時ぐらいは、自由に、とことん楽しんで作りたいものだ。得てして、そうしたストレスのかからない環境で作ったアプリケーションこそが、バズったりするもんだから、世の中って皮肉なもんである。\u003C\u002Fp>\n\u003Cp>　さぁ、\u003Ca href=\"\u002Fmhrise-skill-simulator-creation-chapter-4\">次回\u003C\u002Fa>は早速、開発着手だ。PHPでデータベース操作周りを作っていくよ。\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},"mhrise-skill-simulator-creation-chapter-2","モンスターハンターライズのスキルシミュレータを作ってみる！ 第2回","2021-04-10T17:30:26","設計フェーズにおいて、どの設計から始めるかは、設計担当するエンジニアによってまちまちだと思う。私の場合、アプリケーション内で取り扱われるデータの体系が掴みやすくなるので、データベースを使うシステムの場合、データベースの…",[309],{"slug":22,"name":23},{"slug":311,"title":312,"date":313,"excerpt":314,"image":203,"categories":315},"mhrise-skill-simulator-creation-chapter-4","モンスターハンターライズのスキルシミュレータを作ってみる！ 第4回","2021-04-14T18:34:50","さて、この回から実際の開発に入っていくのだが、まずはローカルPCなどに開発環境を準備する必要がある。開発環境用のサーバを利用しても良いのだが、今回はVue.jsを利用するために、都度ソースのトランスパイル・ビルドが発生…",[316],{"slug":22,"name":23},1793391397031]