Generated by All in One SEO v5.0.0.1, this is an llms.txt file, used by LLMs to index the site. # イケてないコード - Webエンジニアのブログ HTML,PHP,jQueryなど、Web開発で使えるテクニックやライブラリを紹介していきます。 ## Sitemaps - [XML Sitemap](https://wp.tech-style.info/sitemap.xml): Contains all public & indexable URLs for this website. ## 投稿 - [来訪したサンタにGoogle Cloud Text-To-Speechでプレゼントをお願いする](https://wp.tech-style.info/archives/1383) - 今回はGoogle Cloud Text-To-Speechで音声の読み上げに挑戦します。この記事はIoTLTアドベントカレンダー2018の記事です。Google Cloud Vision APIでサンタ認識をしたあと、音声合成でサンタにプレゼントを置いていくように伝えます。 - [Drupal8でDBのインポート・エクスポートをする方法](https://wp.tech-style.info/archives/1439) - Drupalでの開発はDBをダメにしてしまうことがあったりします。そういった時にDBのインポート・エクスポートはよく行うので備忘録も兼ねてご紹介します。mysqladminを使う方法もありますが、drushを通して実行することが可能です。 - [Chromebookにdocker-composeをインストールして開発機にする](https://wp.tech-style.info/archives/1368) - chromebookでlinux対応が始まったので早速pixelbookにdockerを入れて開発機にしてみました。pixelbookのlinuxはdebianなのでdebianへのインストール方法と同じですが、localhostにアクセスできないなどのハマりどころがありました。 - [クッキーはもう古い!?HTML5 LocalStorageの使い方](https://wp.tech-style.info/archives/742) - 今回はHTML5で追加されたLocalStorageの使い方をご紹介していきます。LocalStorageとはWebStorageの一種で、javascriptを使用して任意のデータをクライアント側へ半永久的に保存しておくことができます。クッキーよりも大容量を扱うことができ、無期限に保存できるので開発の幅が広がります。 - [Chromebookがlinux対応!ChromeOSのターミナルを動かしてみた!](https://wp.tech-style.info/archives/1306) - 私は普段からchromebook C101PAを活用しているのですが、今までchromebookで開発をするに - [Raspberry Piで何ができるの?活用例をまとめてみた!](https://wp.tech-style.info/archives/1343) - ここ数年、IoTなどで話をよく聞くようになったRaspberry Piについてご紹介します。はじめての人にとっては一見難しそうに見えますが、初心者向けのデバイスで、様々なことに使えます。 - [CakePHP2.x チートシートを使ってみよう](https://wp.tech-style.info/archives/409) - フレームワークに慣れてきても、ある時ふと引数を忘れたり、関数名を忘れてしまう時があります。そんな時に便利なCakePHPチートシートをご紹介します!2.3対応でほぼ全ての関数を網羅しているので非常に便利です。 - [Raspberry PiとGoogle Cloud Vision APIでサンタの来訪検知システムを作ってみる](https://wp.tech-style.info/archives/1224) - 今回はGoogle Cloud Vision APIとRaspberry Pi、Webカメラを使用してサンタの来訪検知を作ってみます。個々の制御はNode.jsで実装します。ラズパイ上から写真撮影を行ない、その画像からサンタの判定をCloud Vision APIで行い、サンタだった場合はslackへ画像をアップします - [jQueryでAjaxを始めよう! - Deferredを使った非同期処理の書き方](https://wp.tech-style.info/archives/619) - 今回はjQueryのAjax関数を使用して、非同期通信を行う方法をご紹介します。Ajaxを使うことでページ遷移をせずにコンテンツを書き換えることができ、ユーザビリティの向上に繋がります。また、非同期で処理を行うので様々な処理を並列ですすめることが可能です。jQueryでは簡単にAjaxの処理を扱うことができます。 - [[PHP]ファイルの拡張子判定をする方法 2パターン](https://wp.tech-style.info/archives/138) - ファイルアップロードなどでファイルの拡張子を確認したいときが多くあると思います。今回はファイル名の文字列に対して拡張子判定する方法を、速度検証も交えてご紹介します。 - [画像の顔認識!Node-REDとVisual Recognitionでリア充判定をしてみた!](https://wp.tech-style.info/archives/1081) - 今回はBluemixのWatsonAPIにある、Visual Recognitionを使用して顔認識をやってみました。このAPIは画像内に含まれる顔や性別、年齢を判別しJSON形式でデータを返却します。これを利用して画像のリア充認識をやってみました。この記事はteratail Bluemixアドベントカレンダーの記事です。 - [[HTML]spacer.gifとdivのspacerは使っちゃダメ?](https://wp.tech-style.info/archives/48) - 今回は一昔前に活躍していたspacer.gifと最近出始めたdivのspacerについてのお話。果たしてこれらは適切なのかを解説を交えてまとめました。 - [Google Apps Scriptを始めよう! - 導入編 ファイル作成からHelloWorldまで](https://wp.tech-style.info/archives/1019) - 今回はGoogleAppsScript(GAS)についてご紹介していきます。サーバサイドで動作するjavascriptで、ブラウザ上からコーディング、実行、定期実行設定などが可能です。GoogleAppsScriptを使うことで外部APIとの連携やGoogleサービスの操作も可能です!GASで自動化生活を初めましょう! - [「HTML5のSpeech Recognitionでteratailと対話してみた!」のLTスライドを公開しました](https://wp.tech-style.info/archives/1004) - HTML5のSpeech RecognitionとteratailAPIを使用して擬似的なAIを作成してみました。javascriptで処理を少し入れるだけでブラウザからマイク入力を行うことができ、マイクで話した内容を文字列として出力することができます。デモも公開中です。 - [QR code APIでQRコードを生成してみた!](https://wp.tech-style.info/archives/932) - 今回はAPIを使用してQRコードを生成する方法をご紹介します。QRコードを生成する方法としてGoogle Chart APIが有名な方法かと思いますが、非推奨なので利用は避けたいところです。そこで、今回は海外で提供されている「QR code API」を使用して実際にQRコードを生成してみました。 - [「HTML5でteratailが喋った!」のLTスライドを公開しました](https://wp.tech-style.info/archives/942) - teratail meet upにてLT登壇を行いました。今回はHTML5のWeb Speech APIを使ってブラウザを喋らせるデモを行いました。スライドと一緒にSpeech Synthesis APIの使い方をご紹介します。 - [PythonでChromecastを制御してみた!](https://wp.tech-style.info/archives/892) - 今回はPythonからChromecastを制御してみました。pychromecastというPythonパッケージを使用することで簡単にChromecastを動かすことができ、動画や画像をテレビで表示させることができます。一見難しそうですが、Pythonのコードを数行記述するだけで動かせます! - [「PythonでGoogleのアレを制御してみた」のLTスライドを公開しました](https://wp.tech-style.info/archives/884) - Python入門者の集いでのLTスライドです。PythonでGoogleのChromecastを制御しました。pychromecastのパッケージを使用することでPythonからChromecastの動きを制御することができます。 - [Resource Hintsとlinkタグによる事前読み込みでWebサイトを高速化しよう!](https://wp.tech-style.info/archives/852) - 今回はResource Hintsの仕様に基づいたlinkタグの使い方をご紹介します。Webサイトの高速化手法の一つに遅延ロードがありますが、prerender,preconnect,prefetchを使うと、リソースの先読みを行うことができ、表示速度の高速化を図ることができます。 - [第2回集まっtailにて「フロントエンド最適化」のLT登壇しました](https://wp.tech-style.info/archives/777) - teratailが主催の「第2回 teratail Meetup "集まっtail"」に参加してきました。前回 - [「UXを向上させる サイト高速化」のLTスライドを公開しました](https://wp.tech-style.info/archives/842) - 集まっtail 第3回のLTスライドです。UXを向上させるための高速化施策についてお話させていただきました。主にlinkタグを使用したpreloadやprerenderの技術、lazyloadを使用した画像の遅延ロードなどの技術をご紹介しています。 - [teratail主催「集まっtail」にてPhalconのLTで登壇しました](https://wp.tech-style.info/archives/673) - 6月11日、TeraTailMeetup「集まっtail」に参加してきました。TeraTailユーザの技術者同士が交流する会です。そこで開催されたLT大会でPhalconPHPについてお話させていただきました。今回はそのレポートをお送りします。 - [Google Feed APIでRSSやATOMを読み込む方法](https://wp.tech-style.info/archives/823) - 今回はGoogle Feed APIでRSSやATOMのフィード読み込む方法をご紹介します。javascriptから外部のフィードを参照すると、クロスドメイン制約により読み込むことができません。ですが、Google Feed APIを経由すると簡単にフィードを非同期で読み込むことができます。 - [javascriptでセッション?HTML5 SessionStorageの使い方](https://wp.tech-style.info/archives/787) - 今回はsessionStorageの使い方をご紹介します。sessionStorageはWebStorageの一種で、javascriptを介してフロント側へ一時的にデータを保持することができます。サーバで使用するセッションと似た仕組みなので作業途中のデータ保存や画面遷移時のデータ保存などに役立ちます。 - [HTML5のmicrodataとは?CakePHPのパンくずリストに適用してみた](https://wp.tech-style.info/archives/434) - HTML5で追加されたmicrodata属性。HTMLに意味を持たせる事でGoogleの検索結果に追加情報が表示されるようになり、SEO対策での強い味方になってくれます。今回はmicrodataについて事例を踏まえて解説し、CakePHPのgetCrumbList関数でmicrodataを使用していきます。 - [HTML5の独自データ属性を使ってみよう!](https://wp.tech-style.info/archives/102) - 今回はHTML5で追加された独自データ属性について紹介していきます。独自属性を設定しておくと、属性値にjavascriptからアクセスし、値を取り出すことが出来ます。更にjQueryやajaxと組み合わせることで非常に頼もしい武器となります。システム開発でも役に立つのでマスターしておきましょう。 - [CakePHPでJSONを返すAPIを作る](https://wp.tech-style.info/archives/418) - CakePHPでJSONを返すWebAPIを作成する方法をご紹介します。サーバサイドもフロントエンドも綺麗に書けるようにJSONの設計から考えていきましょう。PHPではcompactを使って簡単便利にJSONを組み立てていきます。 - [CakePHPでHTMLの入ったJSONを返すAPIを作ってみた](https://wp.tech-style.info/archives/609) - Controller内部でレンダーしたViewのHTMLを取得し、そこからJSONを作成します。JSONを使うことでHTMLを返しながらも処理結果を別に付与することができます。Ajaxの処理を行う際にHTMLとその他の情報を同時に返却できるので色々と便利な手法です。 - [爆速フレームワーク!Phalcon PHPをWindows XAMPP環境にインストールしてみた](https://wp.tech-style.info/archives/627) - ベンチマークで圧倒的なスコアをたたき出した、爆速PHPフレームワークのPhalcon。今回はWindowsとXAMPPの環境にインストールし、PhalconDevToolsのセットアップまで行います。 - [最速!PhalconPHPの特徴、メリット・デメリット](https://wp.tech-style.info/archives/655) - 今回は最速フレームワーク、PhalconPHPの特徴や導入するにあたってのメリットやデメリットをご紹介していきます。PhalconはCで書かれたPHP拡張としてPHPに読み込ませて使用するフレームワークです。そのため他のフレームワークにはない速度、省メモリを実現することができます。 - [LinuxにGitの最新バージョンをソースからインストールする](https://wp.tech-style.info/archives/592) - 今回はCentOS6.5にgitの最新バージョン(2.3.3)をインストールします。yumを使用したインストールだと古いバージョンが入ってくるのでソースからmakeでインストールする方法をご紹介します。 - [PHPで0埋めをする2つの方法- sprintf関数とstr_pad関数](https://wp.tech-style.info/archives/582) - 数字のゼロパディング、0埋めをする方法をご紹介します。基本的にstr_padを使うのが一般的かと思いますが、sprintfのフォーマット文字列を上手く使うことでスマートに0埋めをすることができます。今回はstr_padとsprintf、それぞれで0埋めをする方法をご紹介します。 - [Gitとは? - Gitの仕組みを速攻で理解する](https://wp.tech-style.info/archives/506) - 今回は最低限Gitを使うのに必要な知識をかいつまんで解説していきます。Gitはバージョン管理をする上で強力な機能が多々ありますが、その反面機能や概念を全て理解するのに時間がかかりがちです。この記事では出来る限り必要な知識を簡潔に解説し、理解のための橋渡しをしていきます。 - [PostgreSQLでバックアップ・リストアする方法](https://wp.tech-style.info/archives/563) - 今回はPostgreSQLでデータベースをダンプする方法をご紹介します。pg_dumpコマンドを使用することで、Postresを止めることなくバックアップを取ることができます。ダンプの形式もいくつか種類があるので合わせて解説していきます。 - [CakePHPでリファラのURLを取得する - referer関数](https://wp.tech-style.info/archives/554) - 今回はCakePHPのControllerでリファラのURLを取得する方法をご紹介します。Controllerのreferer関数を使うことで前のページのURLを取得することができます。また、引数を指定することでリファラが取れなかった場合に代わりのURLを指定することもできます。 - [javascriptでconstを使わずに値の上書きを禁止する方法](https://wp.tech-style.info/archives/545) - javascriptで上書きさせたくない値を定数で宣言したいと思った時、IEではconstを使うことができないという壁にぶつかります。今回はjavascriptでconstを使わずに値の上書きを禁止することができるObject.freeze()をご紹介します。 - [CakePHPにHTML5を適用する方法](https://wp.tech-style.info/archives/499) - CakePHPのHtmlHelperに閉じタグの省略やHTML5の省略可能属性を適用する方法をご紹介します。CakePHPは基本的にXHTMLに準拠した形式で作成されていますが、設定ファイルを読ませることでコアのコードを触ることなくHTML5に対応させることができます。 - [[CakePHP]モデルの空配列を返す関数](https://wp.tech-style.info/archives/20) - 今回はCakePHPのAPIにありそうで、意外とない「Modelの空配列を返す関数」を紹介します。AppModelへ記述すると色々な場面で活躍します! - [[CakePHP]CakePHPでjQueryのAjaxを使う方法](https://wp.tech-style.info/archives/66) - 今回はCakePHPでjqueryのAjaxを使用します。CakePHPでAjaxを使う場合はRequestHandlerでの判定やautoRenderの解除などを行って、正しくAjaxを扱えるようにしなければいけません。 - [[Eclipse]イケてるエディタに早変わり!-EclipseColorTheme](https://wp.tech-style.info/archives/170) - Eclipseのエディタを格好よくカスタマイズする方法をご紹介します。Eclipseのプラグイン、「EclipseColorTheme」を使うことでエディタの色や背景を簡単に変えることができます。黒系のテーマは目が疲れないのでオススメです! - [[PHP]自作例外で処理を最適化!](https://wp.tech-style.info/archives/151) - 処理が失敗した時に、事後処理を分岐させることができる例外(Exception)。自分で独自の例外を作成することで様々な処理を分岐することができ、コードの可読性も高まります。また、処理が失敗した時の問題の切り分けも楽になります。意外と簡単に作れるので、活用してみましょう! - [PHP速度対決!差が出る5パターン](https://wp.tech-style.info/archives/123) - 今回はPHPで迷いがちな5つのパターンを速度の面で検証し、まとめています。基本的な構文5パターン、ちょっとした気配りで少しでも速いコードを書きましょう! - [[CakePHP]独自のログファイルを出力する](https://wp.tech-style.info/archives/93) - 今回はdebug.logやerror.log以外のファイル名でログ出力をする方法を紹介します。ログをファイル分けする事で見たいログが埋もれてしまった!なんてことを避ける事ができます。 - [[js]自由自在にグラフを描画できるjsライブラリ ―Chart.js](https://wp.tech-style.info/archives/230) - HTML5のCANVASを用いて自動でチャートやグラフを描画してくれるjavascriptライブラリ、Chart.js。値の受け渡しも簡単で、様々な種類のチャートを自在に描画することができます。オプションでチャートのスタイルを設定することができるので、おすすめです!今回はサンプルも交えてご紹介していきます。 - [[PHP]定数に配列を入れる方法](https://wp.tech-style.info/archives/263) - PHPでは基本的に配列を定数に入れることはできません。でもどうしても入れたい時、一工夫するだけで配列を定数に定義することができます。今回はその手法を2つご紹介していきます! - [[PHP]switch文の危険な2パターン](https://wp.tech-style.info/archives/278) - コードの可読性を高める上でswitch文は重要な存在です。ですがPHPのswitch文にはいくつか危険が潜んでおり、他の言語と同じ感覚で使用していると大変なことになります。今回は私がハマった1パターンに加え、もう1つの危険についてまとめていきます。 - [PHP5.4のtrait機能を使ってみる](https://wp.tech-style.info/archives/309) - PHPの単一継承を和らげる為の機能として、trait(トレイト)というものがあります。クラスのように関数や変数を持ち、クラスに組み込む事ができます。また、複数のクラスで使いまわす事ができ、traitも複数組み込む事も可能です。この機能を使いこなすことで幅広く設計ができるので覚えておきましょう! - [[PHP]リダイレクトをする方法](https://wp.tech-style.info/archives/273) - 今回はピュアPHPで画面遷移、リダイレクトをする方法をご紹介します。基本的にheader関数を使ってヘッダー出力することでリダイレクトが実現できますが、いくつかの決まり事を守って使う必要があります。 - [CakePHPで実行中のアクションを切り替える便利関数!](https://wp.tech-style.info/archives/359) - CakePHPでアクションの処理を実行している時、他のアクションに移りたい・・という時があります。そんな時はsetAction関数を使うことでリダイレクトせずに他アクションの処理を行うことができます!簡単に使う事ができますが、少し変わった動きをするので注意点も含めご紹介します。 - [tableにソート機能を追加するライブラリ! ―jquery tablesorter](https://wp.tech-style.info/archives/377) - tableタグにソート機能を付けたい時、jQueryライブラリのtablesorterを使うことで簡単にソートを実装することができます!また、ライブラリ内にテーマも含まれているのでテーブルの装飾もできてしまうのです。そんなtablesorterをサンプル付きで紹介してきます。 - [スピナーを簡単に実装できるライブラリ ーspin.js](https://wp.tech-style.info/archives/397) - ロード中などで描画されるクルクル画像をスピナーといいます。今回はこのスピナーをたった1ファイルで簡単に実装できる、spin.jsをご紹介します。CSSも不要なのでお勧めです!スピナーはユーザのストレスを軽減させる効果があります。Ajax処理の待ち時間などに表示させる事が効果的です。 - [REST APIとは? - API設計のポイント!](https://wp.tech-style.info/archives/683) - 今回はRESTAPIの設計ポイントについてご紹介します。REST APIの設計は色々と奥が深く、なかなかおもしろい技術です。RESTに基づいた設計を行うことで、シンプルで分かりやすいAPIを作ることができます。 - [CakePHP3のbakeで常に最新のTable/Entityを出力できるようにする](https://wp.tech-style.info/archives/1519) - この記事は2019年 CakePHP3アドベントカレンダー 13日目の記事です。 CakePHPでの開発で欠か - [ChromebookにPHPStorm (JetBrains IDE)の開発環境を構築する方法](https://wp.tech-style.info/archives/1471) - Chromebookでも開発ができる時代です。今回は愛機であるPixelbook goでPHP開発をするため、 ## 固定ページ - [サイトについて](https://wp.tech-style.info/about) - イケてないコードとは 設計がイケてない、コードが行けてない(上手くいってない)など、イケてないコードに出くわし - [お問い合わせ](https://wp.tech-style.info/contact) - お問い合わせフォームです。 ## カテゴリー - [未分類](https://wp.tech-style.info/archives/category/未分類) - [CakePHP](https://wp.tech-style.info/archives/category/cakephp) - [PHP](https://wp.tech-style.info/archives/category/php) - [HTML](https://wp.tech-style.info/archives/category/html) - [javascript](https://wp.tech-style.info/archives/category/javascript) - [HTML5](https://wp.tech-style.info/archives/category/html/html5) - [開発環境](https://wp.tech-style.info/archives/category/開発環境) - [Eclipse](https://wp.tech-style.info/archives/category/開発環境/eclipse) - [jQuery](https://wp.tech-style.info/archives/category/javascript/jquery-javascript) - [SEO](https://wp.tech-style.info/archives/category/seo) - [Git](https://wp.tech-style.info/archives/category/git) - [PostgreSQL](https://wp.tech-style.info/archives/category/postgresql) - [PhalconPHP](https://wp.tech-style.info/archives/category/phalconphp) - [WebAPI](https://wp.tech-style.info/archives/category/webapi) - [スライド](https://wp.tech-style.info/archives/category/slide) - [サイト高速化](https://wp.tech-style.info/archives/category/site-performance) - [Python](https://wp.tech-style.info/archives/category/python) - [Google Apps Script](https://wp.tech-style.info/archives/category/google-apps-script) - [Google Cloud Platform](https://wp.tech-style.info/archives/category/google-cloud-platform) - [Raspberry Pi](https://wp.tech-style.info/archives/category/raspberry-pi) - [chromebook](https://wp.tech-style.info/archives/category/chromebook) - [Drupal](https://wp.tech-style.info/archives/category/drupal) ## タグ - [CSS](https://wp.tech-style.info/archives/tag/css) - [Ajax](https://wp.tech-style.info/archives/tag/ajax) - [正規表現](https://wp.tech-style.info/archives/tag/正規表現) - [文字列](https://wp.tech-style.info/archives/tag/文字列) - [ライブラリ](https://wp.tech-style.info/archives/tag/ライブラリ) - [chart.js](https://wp.tech-style.info/archives/tag/chart-js) - [JSON](https://wp.tech-style.info/archives/tag/json) - [trait](https://wp.tech-style.info/archives/tag/trait) - [トレイト](https://wp.tech-style.info/archives/tag/トレイト) - [リダイレクト](https://wp.tech-style.info/archives/tag/リダイレクト) - [header関数](https://wp.tech-style.info/archives/tag/header関数) - [setAction](https://wp.tech-style.info/archives/tag/setaction) - [tablesorter](https://wp.tech-style.info/archives/tag/tablesorter) - [spin.js](https://wp.tech-style.info/archives/tag/spin-js) - [cheatsheet](https://wp.tech-style.info/archives/tag/cheatsheet) - [microdata](https://wp.tech-style.info/archives/tag/microdata) - [getCrumbList](https://wp.tech-style.info/archives/tag/getcrumblist) - [HtmlHelper](https://wp.tech-style.info/archives/tag/htmlhelper) - [バージョン管理](https://wp.tech-style.info/archives/tag/バージョン管理) - [入門](https://wp.tech-style.info/archives/tag/入門) - [const](https://wp.tech-style.info/archives/tag/const) - [js](https://wp.tech-style.info/archives/tag/js) - [Object.freeze()](https://wp.tech-style.info/archives/tag/object-freeze) - [リファラ](https://wp.tech-style.info/archives/tag/リファラ) - [Controller](https://wp.tech-style.info/archives/tag/controller) - [データベース](https://wp.tech-style.info/archives/tag/データベース) - [pg_dump](https://wp.tech-style.info/archives/tag/pg_dump) - [pg_dumpall](https://wp.tech-style.info/archives/tag/pg_dumpall) - [バックアップ](https://wp.tech-style.info/archives/tag/バックアップ) - [str_pad](https://wp.tech-style.info/archives/tag/str_pad) - [sprintf](https://wp.tech-style.info/archives/tag/sprintf) - [ゼロパディング](https://wp.tech-style.info/archives/tag/ゼロパディング) - [API](https://wp.tech-style.info/archives/tag/api) - [フレームワーク](https://wp.tech-style.info/archives/tag/フレームワーク) - [ライトニングトーク](https://wp.tech-style.info/archives/tag/ライトニングトーク) - [TeraTail](https://wp.tech-style.info/archives/tag/teratail) - [REST API](https://wp.tech-style.info/archives/tag/rest-api) - [REST](https://wp.tech-style.info/archives/tag/rest) - [設計](https://wp.tech-style.info/archives/tag/設計) - [PHP](https://wp.tech-style.info/archives/tag/php) - [jQuery](https://wp.tech-style.info/archives/tag/jquery) - [javascript](https://wp.tech-style.info/archives/tag/javascript) - [HTML5](https://wp.tech-style.info/archives/tag/html5) - [localStorage](https://wp.tech-style.info/archives/tag/localstorage) - [WebStorage](https://wp.tech-style.info/archives/tag/webstorage) - [Resource Hints](https://wp.tech-style.info/archives/tag/resource-hints) - [Speech Synthesis API](https://wp.tech-style.info/archives/tag/speech-synthesis-api) - [Web Speech API](https://wp.tech-style.info/archives/tag/web-speech-api) - [QRコード](https://wp.tech-style.info/archives/tag/qrコード) - [Bluemix](https://wp.tech-style.info/archives/tag/bluemix) - [WatsonAPI](https://wp.tech-style.info/archives/tag/watsonapi) - [docker](https://wp.tech-style.info/archives/tag/docker) - [drush](https://wp.tech-style.info/archives/tag/drush)