5丁目通信(仮称)コンテンツへスキップ5丁目通信(仮称)とある5丁目で活動するWebプログラマーの覚え書きです。オープンソースCandyCaneの代替としてRedmineをインストールしようとしたけど中断。普段、プロジェクトの課題管理をCandyCaneで行っているけど、そろそろCandyCaneはプロジェクトとして収束の方向に向かっているので、新しいソフトウエアを探さないければいけない。課題管理のソフトウェアだから、どの課題(チケット)が終わっていないのかをわかるようにすることは当たり前だけど、一番は課題が何時間かかったかを集計する必要がある。作業時間の集計結果で、お客さんに作業費を請求している。プロジェクト管理ソフトウェアの売りであるガントチャートなんて要らない。一人で利用するので、他ユーザーとのコラボレーションの機能も要らない。カンバンとか必要ないし、状態の一覧(終了していいない課題)があればよろしい。そのくらい限定した機能で十分なのである。CandyCaneは課題ごとに経過時間として作業時間を登録できる。期間で作業時間を集計してCSVに出力できる。CandyCaneはとてもシンプルで気に入っている。課題管理のソフトウェアとしてアトラシアンのJiraなどを調べてみたけど、作業時間の集計の機能で満足できない。単純に、課題に何時間使っただけの集計だけでいいのに、余計な機能が付き過ぎている。結局はCandyCaneの元になったRedmineを検討する。Redmineの一番のネックはRubyで動いていることである。今までRubyの動いているソフトウェアでまともにインストールできた試しがない。Rubyの環境を作るのに断念している。簡単にそこら辺のレンタルサーバーで動かないのは辛い。CandyCaneが動いているさくらインターネットのVPSのサーバーでRedmineを動かそうとしたが、案の定ライブラリが古いとかでインストールができなかった。ライブラリをあげても、せっかく今正常に動いているCandyCaneのサイトが動かなくなってしまうのは癪だから、これで中断する。別にサーバーを契約するか(そんなにコストをかけたくないし)、あらかじめRedmineを提供しているサービスを利用するか(こちらももっとコストがかかるし)、はたまた社内にサーバーを立てるか(運用が面倒だし)を考えることにする。Redmine以外にまだプロジェクトの課題管理のソフトウェアを引き続き探していく。このままだとCandyCaneのままでいきそう。PHPのバージョンが・・・・。インストールBackWPupプラグインでエラーが出るのでBackWPupプラグインでエラーの通知が来た。BackWPupはWordPressの自動バックアッププラグイ。実はエラーを出ていても、しばらく放っておいたけど。エラーが出ていると何か気持ち悪いので対応する。BackWPupの管理画面に入ると、「mysqliがどうしたこうしたと」警告が出ていた。これを手がかりに対応する。回数が多すぎます」とエラーメッセージが表示する。こちらを手がかりにしたほうが簡単に対応方法が見つかった。要はPHPのバージョンが古くてmysqliのPHP拡張モジュールを対応していないからMySQLに接続しようとするとタイムアウトになっているとのことだった(だいぶ意訳)。-vを打ってみると5.6だった。PHPのバージョンが古いのが原因だった。さくらインターネットのサーバーコントロールでPHPのバージョンを7.2に切り替えてみる。思いつきで切り替えてはダメ。WordPressのサイトにアクセスすると、画面が真っ白になってしまう。「ああ、やってもうた・・・」と思ったけど気を取り直して、さくらインターネットのサーバーコントロールからPHPのバージョンを5.6に戻してみる。これは無事にアクセスできて元通り。この辺りはレンタルサーバーの気軽で簡単なところ。専用サーバーだったら、PHPのバージョンを元に戻すは大変だろうな。プラグインが悪さしているのだろうと思って、めぼしいプラグインを無効にしておく。PHPを7.2に切り替えると、今度は無事にアクセスできる。一つづつプラグインを有効にしてみて、PHP7.2に対応していないプラグインを探してみる。インストールしていて対応していていないプラグインは、Google+Blogspam-byebyeの2つだった。spam-byebyeは、もう古いしWordPressのJetPackでスパムコメントの対応はできていそうなのでもう必要ない。痛いのはGoogle+Blogである。こいつはいくらかお金を払ってインストールしたもの。Google+(みなさん使っていないと思うが、実は自分が利用している唯一のSNS)から記事を自動的に取得して投稿してくれる連携プラグインである。このままではGoogle+Blogプラグインを有効にするとサイトにアクセスできなくなるので、したかないけど無効にしておく。502になるので、既にサポート終了になってしまっている。WordPressからG+へは自動投稿できているからよしとする。以上でPHP7.2の対応完了。本件の始まりだったBackWPupプラグインのエラーはなくていた。ジョブを直接実行してみると正常にバックアップができていた。Codeの開発環境を構築する。CakePHP3で作りたいものがあったので、CakePHP3の開発環境を簡単にDockerを使って構築しようと思い立った。最初は自分でdocker-compose.ymlを作成してコンテナを起動してみたけど、どうしてもXdebugでデバッグができなかった。Laradockという本来はLaravelフレームワーク用のDockerコンテナキットを見つけた。最後にcomposerでLaravelの代わりにCakePHPをインストールできるらしいからLaradockを使ってみた。Serverもある)、自分でdocker-compose.ymlを書くよりはいいだろうと思った。参考までにこれから構築していく自分の環境は以下の通りである。Codeの開発環境を構築する。8dd22a96以下はいろいろと参考にしたサイトからつまみ食いしなから設定を行った部分を抜き出してまとめていく。Laradockの設定は、こちらのサイトを途中まで参考にした。PHPフレームワーク「Laradock」で、手軽にLaravel+Dockerな開発環境を構築するgitのcloneでLaradockをインストールしている。次にLaradockでCakePHP3に関する設定を行うには、こちらのサイトを参考にした。LaradockでPHPフレームワーク(Laravel・CakePHP)とCMS(WordPress・Drupal・baserCMS)の開発環境(nginx・php-fpm・mysql)を構築する.envをコピーして設定して、これでインストール完了ですと言えないのは、コピー&ペーストインストールのいつものこと。このままではphpMyAdminからMySQLコンテナに接続できないとか、細かい問題があった。XdebugでPHPのデバッグをやりたかったので、いろいろ設定を追加していく。上記の2つのサイトを参考にしてLaradockをインストールする。自分のところでは、今までの作業でディレクトリはこのようになっている。src.envの設定だが、設定の一番のポイントはポート番号を重ならないこと。ローカルでPHP+Xdebugが動いていたようなので、ポート番号の指定で嵌まった。使っていないポート番号を設定しておく。phpMyAdminの設定を上げておく。PMA_PORT=8083使っていない別のポート番号に設定し直しておく。MYSQL_VERSIONは元の設定の8.0だと認証で失敗してしまったので、8.0ではく5.7に設定したら認証ができた。こちらは何か別のよい方法があるかもしれない。修正した箇所だけを上げておく。PHP_FPM_INSTALL_INTL=trueXdebugを使うのでWORKSPACE_INSTALL_XDEBUGとPHP_FPM_INSTALL_XDEBUGをtrueにして(PHP_FPM_INSTALL_XDEBUGだけでもいいかも?)、PHP_FPM_INSTALL_INTLはCakePHP3で必要なのでtrueにしておく。.envの設定の最後として、CakePHP3のインストール先のディレクトリも設定しておく。`/var/www`.APPLICATION=../src/nginxのドキュメントルートを修正する。設定するファイルは以下のファイルである。.\laradock\nginx\sites\default.confこちらのrootの設定を、CakePHP3のリモート側のドキュメントルートのディレクトリに設定する。今回のプロジェクト名をmycakephpとしておく。composeを実行してコンテナを起動しておく。phpmyadminworkspaceコンテナにログインして、composerを使ってCakePHP3をインストールしておく。こちらは参考サイトの通り。LaradockでCakePHPの開発環境(nginx・php-fpm・mysql)を構築するここではサイトに書いてある通り、以下のコマンドでプロジェクトmycakephpでCakePHP3をインストールした。mycakephpnginxからCakePHP3のサイトを参照できるかチェックする。OKならCakePHP3の初期画面が見えるはず。データベースの接続の設定を.\src\mycakephp\config\app.phpにしておく。:このような感じで.envのMySQLの設定に合わせておけば、データベースに接続が成功はずである。phpMyAdminも確認しておく。こちらも.envのMySQLの設定通りにすればログインできてMySQLの中を参照できるはずである。MySQLのパスワードは適当なものに変えること。Workbenchからも接続を確認できた。以下の接続情報でWindowsローカルで接続できた。root最後にXdebugの設定である。Xdebugのコンテナ側の設定ファイルは次の2つである。同じ内容でコピーすれば大丈夫だった。.\laradock\php-fpm\xdebug.ini.\laradock\workspace\xdebug.ini自分が設定した内容は以下の通りである。プロフィラの設定も含めて設定しておく。xdebug.var_display_max_depth=-1ここでわからなかったのはxdebug.remote_hostの値だった。結論としてはこちらはWindowsの場合、ipconfigで表示されるDocker側の仮想スイッチのアドレスの値を設定しておく。リモートデバッグ」で検索して、よく出てくるサイトに書かれている$_SERVER[‘HTTP_X_REAL_IP’]とか$_SERVER[‘REMOTE_ADDR’]の値ではないので注意すること。XDebugxdebug.remote_autostart=1xdebug.remote_enable=1xdebug.remote_connect_back=0xdebug.cli_color=1xdebug.profiler_enable=1xdebug.profiler_output_dir="/tmp"xdebug.remote_handler=dbgpxdebug.remote_mode=reqxdebug.var_display_max_children=-1xdebug.var_display_max_data=-1xdebug.var_display_max_depth=-1xdebug.remote_hostの設定は、最近新しくDockerのための設定が追加されたようなので、こちらは難しいことをせずにhost.docker.internalを指定しておく。これでうまくデバッグができるようになった。workspaceでphp-fpmとworkspaceのイメージをビルドしなおす。Composeを再度実行する。nginxのドキュメントルートにphpinfo()を書いたファイルを置いてアクセスしてみて、正しくxdebugが設定されているかを確認しておく。Code)を使っている。Debugをインストールしておく。Codeのデバッグの構成ファイル(launch.json)を修正する。launch.jsonは以下のように設定した。}portは、xdebug.iniのxdebug.remote_portと同じ値にする。"${workspaceRoot}/src"serverSourceRoot、localSourceRootとも今後推奨されない設定のようなので、pathMappingsにしておく。},のようにリモートとローカルのパスをマッピングする設定である。ドキュメントをよく読まずにリモートとローカルを反対にしてしまったので動かなくて悩んだ。こちらはnginxのドキュメントルートのディレクトリではないことに注意する。ドキュメントルートディレクトリ外のファイル(例えば、.\src\mycakephp\src\Controller\AppController.php)をデバックしようとしたときに、pathMappingsにルートディレクトリに設定してしまうとソースファイルが見つからないと言ってくる。そこでソースファイルを格納しているディレクトリを設定しておく。ignoreの設定をしておかないと、以下のような例外が途中で発生する。XDebug”の構成でデバッグを行う。ブレークポイントを設定したところで止まるかとチェックする。後はステップオーバーでプログラムが進むか、ステップインで別のソースを参照できるか、または変数の中身を参照できるかをチェックして完了。構築する際に忘れないようにメモを残しておく。同じ設定をMacでやってみたら、niginxコンテナが起動できなかった。ゴミが入っていたのが原因だった。dockerのログを見たら原因がわかった。無事にMacでCakePHP3のトップページを参照できた。Macでもデバッグができるようなった。xdebug.remote_host=docker.for.mac.localhostを設定すればOKのようだ。情報はこちらのサイトから。Mac)ただし、MacでDockerはとても遅い。ブラウザが表示し終わるのに時間がかかる。Shellで実行するとうまく行く。これは、issuesに上がっているから周知の問題なのかな?追記3MySQLのコンテナが起動できなかったので、解決策はこちらからLaradockでMySQLがどうしても立ち上がらない人あつまれー!追記4(2018年9月14日)xdebug.remote_hostの設定を変更しておく。インストールCakeEmailでメール本文が文字化けするとっても悩んで解決したのでメモを残しておく。CakePHPのCakeEmailを初めて使ってみたら、送信したメールの本文が文字化けする。今までQdmailを使っていたので、そんな現象には合わなかった。Googleさんに聞いてみるとCakeEmailを使っていて本文が文字化けたらとりあえずcharsetを疑ってみるなんて書いてあるけど、charsetにISO-2022-JPを設定しても現象は変わらない。今度はメールヘッダがも文字化けする。しかたないので、CakeEmailをNetBeansのデバッガで追ってみる。CakeEmailの_encodeString()メソッド辺りに見当をつけてブレークポイントを設定する。デバッグしてみると何とmb_convert_encoding()を処理する前にreturnしていた。原因はmb_convert_encoding()関数が存在しないことだった。mbstringモジュールをインストールしていないことが、そもそもの原因である。php.iniにmbstringモジュールを読み込んであげて、mbstringモジュールの設定を適当にしてphpinfo()でmbstringがサポートされていることを確認する。今度は文字化けせずにメールを送れた。WindowsのローカルPCに開発環境にPHPをインストールしたままで動かしたのが原因かもしれない。(バージョン1607)が始まった。心の準備をしていなかったので焦った。まあアップデートしても大丈夫だろうと楽観的に考えて進める。一晩放っておくと無事にアップデートされていた。Windows10の起動も大丈夫みたい。SourceTreeが起動できなくなっていた。起動するとクラッシュメッセージが出てくる。仕方ないのでGitの作業はTortoiseGitに戻した。コマンドのGitは非常用として以外は使っていない。SourceTreeは便利すぎるので何とか使えないものかと再インストールしてみる。AtlassianのSourceTreeのサイトには何故かバージョン1.8.3という古いバージョンが上がっている。こちらをダウンロードしてインストールする。Treeがインストールしたままだと怒られるので一旦アンインストールしておく。無事に起動できるようになった。新しく1.9.5があるのでアップデートするか聞いてくるので、アップデートしてみる。1.9.5にアップデートすると起動できない。1.8.3に戻して、自動でアップデートしないように設定しておく。クラッシュレポートも送ったので、おそらくAtlassianで対応してくれることを期待する。インストール通知をメールからSlackにする。通知がメールで来ます。今使っているバグトラッキングシステムのCandyCaneは、チケットを更新するたびにたくさんメールが飛んできます。メールを受けているGmailでフィルターで自動振り分けしていますが、やはり受信トレイに入ると煩雑です。アーカイブしてしまうと見過ごしてしまいます。そこでチャットサービスのSlackに流してしまいます。CandyCaneから直接Slackにメッセージを流せればいいのですが、新たにプラグインを作るのも面倒なので、簡単に既存のメールからSlackに流してしまいます。使ってたのはIFTTTです。IFTTTはメッセージの加工はできないので、CandyCaneでSlackでわかるようにメールのメッセージを加工してしまいます。CandyCaneのチケットに飛べるようにリンクを流すようにします。CandyCaneからGmailにメールを送信します。そのときGmailの自動振り分けでCandyCaneから受信したとラベルを付けます。プロジェクトごとに振り分けるならば、「プロジェクト名/candycane」のように階層でラベルを付けます。IFTTTのレシピで、GmailのIFでラベルで取得して、THENでSlackのチャンネルに送ってしまいます。このときCandyCaneから送信されるメールで、——–で区切られるとその以降はSlackで無視されるので、メールの送信のViewを修正しておきます。単純にメールテンプレートから——を削除するだけでよかったです。CandyCaneでテキストメールのみで送信するように設定すれば、後はIFTTTがSlackに送り込んでくれます。以上でCandyCaneの通知をSlackに流し込めます。考えてみれば、CandyCaneではなくてredmineのようなメジャーなバグトラッキングシステムを使ったほうが、もっと自由に連携できるかもしれません。オープンソースWordPressの固定ページの中に投稿最新一覧を表示するお客さんのWordPressサイトでカテゴリごとに投稿の最新一覧を表示している固定ページがあります。いい加減手作業で更新するのも面倒になってきましたので、プログラムで対応します。Googleさんに聞いてみるとショートコードを登録して呼び出すようなことをみなさん書いています。何と皆さん出しているPHPのコードはすべて同じです。何か気持ち悪い状態になっています。誰がオリジナルなんでしょうか?しかしながら、WordPressって固定ページ内にPHPのプログラムを書けないのでしたね。今ごろ気が付きました。そのコードをコピペしてもいいのですが、2つのカテゴリの記事一覧を表示したいので、2つコピペしなければいけませんし、第一コピペコピペで気持ち悪いです。パラメーターを渡して切り替えなんて改造すればいいのですが、それも面倒ということで、何か別の方法を探します。いうよさげなプラグインが見つかりました。インストールして試してみます。カテゴリのフィルターが1つで固定されてしまうので、2つのカテゴリの最新一覧を並べることができません。惜しいですがこれでありません。Ultimateです。基本的にショートコードでWordPressのいろいろな部分にアクセスできるのですが、今回は投稿のカテゴリ別にタイトルだけを最新3件の記事を一覧に表示します。tax_term="8"]なんて書いてしまいます。出力されるタイトルがHTMLのコードのh2タグで吐き出してしまいますので、この辺りは本当なら修正しないといけないのでしょう。CSSで指定してデザインを合わせて作業完了です。プログラムWordPressの編集でテーブル内にうまく入力できないお客さんのサイトでトラブル。Wordpressで作っているサイトです。テーブルで行を追加して、セルのなかに漢字を入力するとうまく入力できなくなりました。12月号と入力すると、12gあtうgおうとなってしまいます。2007でとても古かったので、最初これが原因かと思って疑っていました。2010にバージョンアップしても症状は変わりません。そこで、TinyMCEのプラグインを無効にしたところ、今度は正しく入力できます。原因はTinyMCEのようです。テーブルの行の追加はTinyMCEのメニューからできるので、TinyMCEの代わりを探さなければいけません。WordPressといプラグインです。こちらは正常に入力できます。WordPressをこれから使ってもらうことになりました。してTinyMCEでうまく文字が入力できなかったかわかりません。(?)の不具合発生のメモお客さんのサイトがWordpressを使って更新しているのだけど、そこで発生したトラブルのメモ。Advancedプラグインの入力項目で日本語を入力すると発生する。「つき」と入力すると「tうkい」となってしまう。以外のタイトルなどの通常のフォームは正常に入力できる。自分のPCでは正常に入力できる。MS-IMEかATOKで入力しているかの違い。お客さんの障害が発生しているPCでは、古いWindowsなのでMS-IMEも古いバージョン。したがって完全にはバージョンが合わせていない。自分のPCでMS-IMEを使ってもトラブルはない。うまく入力できないのはお客さんのPCだけ。Advancedプラグイン以外のGUIの編集プラグインを探すくらいしか解決はないかな。覚えてもらった入力方法を、お客さんにまた教えるのは大変。最近はWordpressのプラグインのちょっとしたトラブルに悩まされているな。WordPressredirectionプラグインのせいでお客さんから「トップページにアクセスすると、違うページが表示されるよ。そんなバカな、と思ったら、本当にそうだった。そのサイトは、Wordpressで作成されたものを引き継いだもの。マルチサイトで作られている。WordPressの設定もおかしなところもないし、リダイレクトの.htaccessのRewriteの設定も別に大丈夫。勝手に」で聞いてみた。すると、Worpressのredirectionプラグインが悪さしているかも、と出てきた。設定を見てみたら、redirectionプラグインを使っていた。ログを見ているとしっかりとリダイレクトしていた。データベースから直接redirectionプラグインの設定を削除したら、おかしな遷移をしなくなった。WordPress恐るべし。redirectionプラグインを使わずに、最初からRewriteで設定すればいいのに・・・。WordPress当サイトでは利便性向上や閲覧の追跡のためにGoogle・広告などの他提携サービスによりCookieが使用されています。サイトの閲覧を続けた場合Cookieの使用に同意したことになります。キャンセル投稿を送信できませんでした。メールアドレスを確認してください。メール送信チェックに失敗しました。このブログではメールでの投稿共有はできません。