最速でdockerでwordpressの開発環境(ローカル環境)を立ち上げる方法
wordpressをdockerで立ち上げる手順は公式を含めて色々な方が書かれていますので、設定ファイルをgithubにあげてできるだけ簡単にできるようにしました。
めんどうな説明は良いからとりあえず動かしたいんじゃい!というせっかちな方は是非使ってみてください。
対象
- ある程度コマンドラインでの操作ができる方
- dockerとdocker-composeがセットアップ済の方
すぐ動かしたい方向け
設定ファイルをダウンロードする
設定ファイルが置いてあるリポジトリです。 github.com
右上の「Clone or Download」をクリックして、出てきたポップアップの「Download zip」をクリックしてください。

ダウンロードしたファイルを解凍する
ダウンロードされた「docker-wordpress-test-master.zip」をダブルクリックなりで解凍してください。
「docker-wordpress-test-master」というフォルダができるはずです。
適当に作業用のディレクトリに移動しておく事をおすすめします。
コマンドからdocker-composeで立ち上げる
# ↑で解凍したディレクトリに移動して(ディレクトリの位置は各自調整してください) $ cd ~/Downloads/docker-wordpress-test-master # コンテナを立ち上げる $ docker-compose up # たくさんログが出てきて # [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND' が表示されればOK
ブラウザからwordpressを表示する
を叩いて、wordpressの画面が出てくれば成功です。

XXXしたいんだけど!
wordpressのバージョン変えたい
「docker-compose.yml」の「wordpress:5.3.2-php7.4」 の「5.3.2」を変えてdockerを再起動してください。
「5.3.2」の部分がwordpressのバージョンです。
phpのバージョン変えたい
同じく「docker-compose.yml」の「wordpress:5.3.2-php7.4」 の「7.4」を変えてdockerを再起動してください。
「7.4」の部分がphpのバージョンです。
mysqlのバージョンを変えたい
同じく「docker-compose.yml」の「mysql:5.7.20」 の「5.7.20」を変えてdockerを再起動してください。
「5.7.20」の部分がphpのバージョンです。
試してないですが、mysqlの8は認証周りが変わっていたりして、動かないかもしれません。
wordpressをカスタマイズしたい
画面から編集しても良いですし、ファイルを直接編集したい場合は「wordpress」ディレクトリ内のファイルをいじれば反映されます。
mysqlにつなぎたい

↑の画像はSequelProを使っている場合ですが、
| key | 値 | 備考 |
|---|---|---|
| ホスト | 127.0.0.1 | 固定 |
| ユーザー名 | admin | 固定 |
| パスワード | rootpassword | |
| データベース | exampledb | |
| ポート | 3306 |
でつながります。
「パスワード」「データベース」「ポート」はdocker-compose.ymlに書いてあるので、書き換えれば任意のものに変更できます。
2020/02/16追記
テーマをアップロードしようとすると、「辿ったリンクは期限が切れています」エラーとなる対応を入れました。
コード的にはここ。
upload.ini
memory_limit = 128M post_max_size = 20M upload_max_filesize = 20M max_input_time = -1 max_execution_time = 120
docker-compose.yml
- ./docker/wordpress/upload.ini:/usr/local/etc/php/conf.d/uploads.ini
Update docker-compose.yml · daisuke-fukuda/docker-wordpress-test@152db78 · GitHub
Create upload.ini · daisuke-fukuda/docker-wordpress-test@5e4802b · GitHub
【javascript】【vue】 create-nuxt-appした後「No rules found within configuration. Have you provided a "rules" property?」エラー
create-nuxt-appした後に、yarn run dev したら「No rules found within configuration. Have you provided a "rules" property?」エラーでビルドができなかったのを解決しました。
事象
create-nuxt-app hogehoge yarn run dev
create-nuxt-appで作ったプロジェクトに対して(stylelintを使う事を選択)、早速ビルドして動かそうと思ったらエラーが発生しました。
stylelintのエラーです。
ERROR Failed to compile with 1 errors friendly-errors 13:29:05 ERROR StylelintError friendly-errors 13:29:05 No rules found within configuration. Have you provided a "rules" property?
対応
変更前(デフォルト)
module.exports = { // add your custom config here // https://stylelint.io/user-guide/configuration };
変更後
module.exports = { // add your custom config here // https://stylelint.io/user-guide/configuration rules: {}, };
メッセージの通り、rulesを中身は空でも良いので設定したら、解決しました。
原因
ここ。 create-nuxt-app/_stylelint.config.js at v2.12.0 · nuxt/create-nuxt-app · GitHub
なのですが、masterブランチでは解消済なので、次のリリースで解消されると思われます。
create-nuxt-app/_stylelint.config.js at master · nuxt/create-nuxt-app · GitHub
その他調べたページ
Error: No rules found within configuration · Issue #607 · stylelint/stylelint · GitHub
vue.js - I have a problem with the initial configuration of Nuxtjs - Stack Overflow
【vue】 nuxtで「core-js/modules/es6.array.find in ./.nuxt/client.js」エラー
create-nuxt-appした後に、firebaseを入れたら、以下のエラーが発生するようになってしまったのを解決しました。数時間ハマった・・・
事象
create-nuxt-app hogehoge yarn add firebase yarn run dev
create-nuxt-appで作ったプロジェクトに対して、firebaseを入れたら以下のエラーでビルドが通らなくなりました。
ERROR Failed to compile with 34 errors friendly-errors 12:14:14 These dependencies were not found: friendly-errors 12:14:14 friendly-errors 12:14:14 * core-js/modules/es6.array.find in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es6.array.iterator in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es6.date.to-string in ./.nuxt/utils.js, ./.nuxt/components/nuxt.js * core-js/modules/es6.function.name in ./.nuxt/index.js friendly-errors 12:14:14 * core-js/modules/es6.object.assign in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es6.object.keys in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es6.object.to-string in ./.nuxt/router.scrollBehavior.js, ./.nuxt/components/nuxt.js * core-js/modules/es6.promise in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es6.regexp.constructor in ./.nuxt/utils.js friendly-errors 12:14:14 * core-js/modules/es6.regexp.match in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es6.regexp.replace in ./.nuxt/utils.js, ./.nuxt/components/nuxt.js * core-js/modules/es6.regexp.search in ./.nuxt/utils.js friendly-errors 12:14:14 * core-js/modules/es6.regexp.split in ./.nuxt/utils.js, ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./.nuxt/components/nuxt-build-indicator.vue?vue&type=script&lang=js& * core-js/modules/es6.regexp.to-string in ./.nuxt/utils.js, ./.nuxt/components/nuxt.js * core-js/modules/es6.string.includes in ./.nuxt/client.js, ./.nuxt/components/nuxt-link.client.js * core-js/modules/es6.string.iterator in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es6.string.repeat in ./.nuxt/utils.js friendly-errors 12:14:14 * core-js/modules/es6.string.starts-with in ./.nuxt/utils.js friendly-errors 12:14:14 * core-js/modules/es6.symbol in ./.nuxt/client.js, ./.nuxt/components/nuxt-link.client.js * core-js/modules/es7.array.includes in ./.nuxt/client.js, ./.nuxt/components/nuxt-link.client.js * core-js/modules/es7.object.get-own-property-descriptors in ./.nuxt/utils.js * core-js/modules/es7.promise.finally in ./.nuxt/client.js friendly-errors 12:14:14 * core-js/modules/es7.symbol.async-iterator in ./.nuxt/axios.js, ./.nuxt/components/nuxt-link.client.js * core-js/modules/web.dom.iterable in ./.nuxt/axios.js, ./.nuxt/components/nuxt-link.client.js friendly-errors 12:14:14 To install them, you can run: npm install --save core-js/modules/es6.array.find core-js/modules/es6.array.iterator core-js/modules/es6.date.to-string core-js/modules/es6.function.name core-js/modules/es6.object.assign core-js/modules/es6.object.keys core-js/modules/es6.object.to-string core-js/modules/es6.promise core-js/modules/es6.regexp.constructor core-js/modules/es6.regexp.match core-js/modules/es6.regexp.replace core-js/modules/es6.regexp.search core-js/modules/es6.regexp.split core-js/modules/es6.regexp.to-string core-js/modules/es6.string.includes core-js/modules/es6.string.iterator core-js/modules/es6.string.repeat core-js/modules/es6.string.starts-with core-js/modules/es6.symbol core-js/modules/es7.array.includes core-js/modules/es7.object.get-own-property-descriptors core-js/modules/es7.promise.finally core-js/modules/es7.symbol.async-iterator core-js/modules/web.dom.iterable ↻ Updated .nuxt/App.js
エラーメッセージを読むと、
npm install --save core-js/modules/es6.array.find
するといいよ!って買いてあるのだけど、これは罠。そんなライブラリは無いのでこれでは解決しません。
対応
私の環境では、以下で解決しました。 Release Notes - Nuxt.js
nuxt.config.jsに以下を追加します。
export default { build: { babel: { presets({ isServer }) { return [ [ require.resolve('@nuxt/babel-preset-app'), // require.resolve('@nuxt/babel-preset-app-edge'), // For nuxt-edge users { buildTarget: isServer ? 'server' : 'client', corejs: { version: 3 } } ] ] } } } }
その他調べたページ
Dosn't work with core-js@3 · Issue #2554 · firebase/firebase-js-sdk · GitHub
error core-js/modules/ ... when updating to 7.5.0 · Issue #2390 · firebase/firebase-js-sdk · GitHub
まとめると、どうもcore.jsの2系と3系が混在すると色々なところで色々起きるらしいです。(babel周りの知識があやふやなのでちゃんと理解できなかったのだけど)
私の場合、firebaseを入れることによって2系と3系が両方入ってしまい、nuxt側でうまくハンドリングできていなかったのを、明示的に3を使う指定する事でうまくいきました。
ちなみに、firebaseのcore.jsへの依存関係はここらへんです。
core-js@3.6.2: version "3.6.2" resolved "https://registry.npmjs.org/core-js/-/core-js-3.6.2.tgz#2799ea1a59050f0acf50dfe89b916d6503b16caa" integrity sha512-hIE5dXkRzRvnZ5vhkRfQxUvDxQZmD9oueA08jDYRBKJHx+VIl/Pne/e0A4x9LObEEthC/TqiZybUoNM4tRgnKg== core-js@^2.4.0: version "2.6.10" resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==
思いっきり2系と3系が混在していますね。
firebaseをまるごとインストール(yarn add firebaseとか)ではなくて、サービスごとに個別でインストール(yarn add @firebase/appとか)だと、2系と3系の混在は起きないのだけど、firebaseuiがうまく動かなかった、、、
なんかここらへん辛いな〜と思ったら、nuxt.jsがfirebaseを名指しで指摘してました。bable周り辛い。
Because of how package managers (yarn, npm) work, a wrong version of a > dependency from one of the other dependencies may be hoisted into node_modules. Nuxt is strict about this and provides instructions for dependency resolution so please follow it.
The well-known problem is with firebase package that requires to manually install node-fetch dependency in your project.
google翻訳
パッケージマネージャー(yarn、npm)の動作方法により、他の依存関係の1つからの誤ったバージョンの依存関係がnode_modulesに巻き込まれる場合があります。 Nuxtはこれについて厳密であり、依存関係の解決手順を提供しますので、それに従ってください。
よく知られている問題は、プロジェクトにノードフェッチ依存関係を手動でインストールする必要があるfirebaseパッケージにあります。
はてなブログの過去記事をGASでTwitterに自動投稿するようにしたよ
概要
記事数も200を超えてきたですが、昔の記事ってあまり読まれないのと(内容がうんぬんというのはありますが)、個人的にも過去記事をたまに見返すきかっけになるかな?と思い、過去記事をランダムで自動で投稿するようにしてみました。
うざいな〜と思ったらやめますw
自動投稿結果
☆過去記事の紹介(自動投稿です)☆
— ダイスケ@フリーランスのエンジニア (@moyashidaisuke) January 18, 2020
🕘2018/10/09
「2018 北海道東日本パスで東北弾丸3泊4日の旅〜最終日:鳴子温泉 - 東京〜」https://t.co/sJ8UIZH6rN#過去記事bot #はてなブログ
作り方
もう作ってくれた方がいらっしゃっいました。マジ感謝。
基本この通りなのですが、Twitterの仕様変更でこの通りいかないのを頑張ったのと、自分用にカスタマイズしましたメモです。
今から導入する方の参考にどうぞ。
技術要素をざっと解説
google app script(GAS)ではてなブログのRSSをスクレイピングして、TwitterにOAuthして投稿する仕組みです。
GASって外部ライブラリを読み込む事もできるんですね。普通に知らなかったです。
あと、トリガーで定期実行もできて便利。
ちょっとしたツールなら全然GASでいけますねぇ。
紹介記事通りいかなかったところ
TwitterのDeveloper登録
Twitterのアプリケーションを作成する時に、Developer登録というのをする必要があります。
こちらが詳しいです。
Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報 - Qiita
説明の英語はこう書きました。(拙い英語だけど、google翻訳では正しい日本語に翻訳されたので多分伝わるはず、、、
これがTOEIC700点の英語だ!
I will make a bot that posting my old blog entries. I manage my entries in google spreadsheet. GAS scirpt read data from spreadsheet, call twitter api from GAS script. GAS script call will be scheduled.
めんどくさいやり取りが始まるかと思いきや、一日であっさり通りました。
アプリ作成時の注意
name
世界の誰ともかぶっちゃだめです。私は「HatenaOldEntryBotMoyashidaisuke」としました。
Allow this application to be used to sign in with Twitte
よくわからないですが、チェックなしで動きました。
callback
URLは
https://script.google.com/macros/d/XXXXXXXX/usercallback です。
編集画面のURLをコピーすると、
https://script.google.com/d/XXXXXXXXX で微妙に違うので注意。(30分くらい悩んでしまった
カスタマイズ
私好みにしました。
- 日付は年月日まで
- 本文は適当に好みで
// 日時フォーマット変更 var published = Utilities.formatDate(new Date(publishedStr), 'Asia/Tokyo', 'yyyy/MM/dd'); var tweetStr = ""; tweetStr += "☆過去記事の紹介(自動投稿です)☆\n"; tweetStr += "\n"; tweetStr += "🕘" + published + "\n"; tweetStr += "「" + title + "」\n"; tweetStr += url + "\n"; tweetStr += "\n"; tweetStr += "#過去記事bot #はてなブログ \n";
まとめ
GASって業務では避けてましたが(メンテ性がしんどいので、、、)個人用ならめっちゃ便利ですね。大体なんでもできる。
【はてなブログ】Minimalismをnoteに寄せる
2020/01/18 スマホ対応しました。
概要
noteのレイアウト、文章読みやすくて素敵だな、、、それに比べて自分のブログはなんか読みにくいな・・・と思ったので、頑張って寄せてみました。
はてなブログのテンプレート「Minimalism」を使っているのですが、元々かなり変更を加えています。cssは載っけますが、そのままコピペだと動かないかもしれません、ごめんなさい。
フォント
noteのフォントは
font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif;
が指定されています。
また、もうひとつ大事な要素として、
-webkit-font-smoothing: antialiased;
があります。webkit-font-smoothingというのは知らなかったのですが、mac限定で良い感じにフォントを描画してくれるようです。
WebKit implements a similar property, but with different values: -webkit-font-smoothing. It only works on Mac OS X/macOS.https://t.co/WxNkYcZVfF
— ダイスケ@フリーランスのエンジニア (@moyashidaisuke) January 13, 2020
私の環境ではこれを入れると文字がシャープになってすごいスッキリしました。今回の変更で一番効きました。
というわけではてなブログのcssには、
/* 全体 */ body { font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif; -webkit-font-smoothing: antialiased; } /* タイトルのフォント変更 */ #blog-title{ font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif; -webkit-font-smoothing: antialiased; } /* タイトル説明のフォント変更 */ #blog-description{ font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif; -webkit-font-smoothing: antialiased; } /* 記事のフォント変更 */ .entry-content { font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif; color: #222; -webkit-font-smoothing: antialiased; } /* 記事タイトル・カテゴリータイトルのフォント種類・文字間隔(20190601)変更 */ .entry-title, .archive-heading { font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif; color: #222; -webkit-font-smoothing: antialiased; } /* プロフィールIDのフォント種類変更 */ .id a { font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif; -webkit-font-smoothing: antialiased; } /* プロフィールのフォント種類変更 */ .hatena-module-profile .profile-description { font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,Segoe UI,Hiragino Kaku Gothic ProN,Hiragino Sans,ヒラギノ角ゴ ProN W3,Arial,メイリオ,Meiryo,sans-serif; -webkit-font-smoothing: antialiased; }
とします。複数箇所いれないといけないのは、Minimalismの仕様です。
はてなブログのテンプレート「Minimalism」をカスタマイズした② - もやぶろ
全体の幅
noteはPCレイアウトでもサイドバーが無いすっきり仕様で、さらに余白も贅沢に取られています。
今回、Minimalismのサイドバーは残しつつ、本文の幅を同じサイズにしてすっきりさをできるだけ寄せてみました。 本文の幅をせまくした分、サイドバーが目立ってしまってので、サイドバーも控えめサイズにしています。
@media screen and (min-width: 640px) { #main { width: 620px; } #box2 { width: 620px; } } @media screen and (min-width: 1138px) { #box2 { width: 250px; } }
余白/フォントサイズ
ブロック(pタグ)の余白、行の間隔も大きめにとってあるのがnoteの特徴です。詰まってると読みにくいんですね。
というわけで合わせます。
.entry-content p { font-size: 18px; line-height: 36px; margin-top: 36px; margin-bottom: 36px; } /* スマホ */ @media screen and (max-width: 640px) { .entry-content p { font-size: 16px; line-height: 30px; } }
まとめ
beforeの画像撮り忘れてしまったのですが、だいぶすっきりしました。

今までのMinimalismの修正
【書評】「個人開発がやりたくなる本: クリエイター13人の実録エッセイ」はタイトル通り個人開発がやりたくなるよ
🤓はじめに
「個人開発がやりたくなる本: クリエイター13人の実録エッセイ」を読みました。
さくっと読めますし、内容も幅広いので、個人開発に興味ある・やっている人には何かしら刺さると思います👍

個人開発がやりたくなる本: クリエイター13人の実録エッセイ
- 作者:IndieCoderJP
- 発売日: 2019/04/28
- メディア: Kindle版
🐼読んだきっかけ・理由は?
自分は個人開発を始めていてモチベーションに悩んでいたのがスタートだよ
この本関連のイベントに参加する事になったのが直接的なきっかけ。
イベントに参加した理由自体が、個人開発しててモチベーションについて悩んでいたのですが、この本と、イベントで大いに刺激を受けました👍
👆この本の概要
個人開発の色々について書いた本だよ!
👆概要
個人開発者13名による、個人開発の体験談をまとめた合同誌です! WEBサービスやスマホアプリを開発するコツ、失敗談やバズった話、他では言えないお財布事情まで! これから個人開発を始めたい方、サービスを運営中の方におすすめです!
Amazonでの紹介文から引用
個人開発って?
一人で(2、3人だったら許容される場合もありますが)、サービスとかアプリを開発してリリースする事です。
普通サービス(はてなブログとかTwitterとかなんでもいいんですが)を開発する場合、仕事でチームを組んでやりますが、一人で企画、開発、デザイン、サポート、何でもやっちゃうスタイルですね。
⏳所要時間
1時間くらい。さらさらっと読めます。
🙆♂️どんな悩みを持つ人にオススメ?
- プログラム始めたけど何作っていいかわからない
- 副業的に何かサービス/アプリ作ってみようと思ってるけど踏ん切れない
- もう個人でサービス/アプリを作ってるけど色々困ってる
- もう個人でサービス/アプリをリリースしてるけど色々困ってる
🙅♂️逆におすすめしない人
- 副業でサービス作って楽にがっぽがっぽ稼ぎたいぜ!
🤔読むと得られること
個人開発をする上での始め方、技術、お金周り、モチベーション、ポエム系、と幅広いテーマが扱われていますので、自分の悩みによって色々得られるものが変わります。(自分の場合はモチベーション)
悩みが変わったタイミングで読み直すと、また新たな気付きを得られるでしょう。
あと、作者さんは大体Twitterやってますので、つながりにいったりするのも良いですね。
📖同じジャンルの本との比較
個別で技術とかお金周り(マーケティング)について書いてある本はたくさんありますが、個人開発という切り口で幅広く扱った本は珍しい(他に私は知らない)です。
😺本から学んだこと・ココロに残った言葉
信仰ポイント
熱量よりも分かりやすいな〜
ユーザーの熱量を表しているのですが、直感的でわかりやすいなと思いました。
- 満足度が高いと上がる
- 忍耐力が上がる
- 伝染する
- 後から信仰者が入ると下がる
サービスとかゲームとか、バンドとかでもこういうのありますよね。
- すごい好きなバンドを見つける
- かっこいいライブを見せてくれると上がる
- たまに活動休止したりごたごたが合っても待つ
- 人に勧めたくなる
- メジャーデビューすると最初は「儂が育てた」気分になるが、だんだんフェードアウトしてしまう
信仰は直接は目に見えないので信仰ポイントも見えないですが、意識しておくと面白いですね。
ガウディらない
完成しないあれね!

すごく壮大なものを作ろうとして一生完成しない事を表す造語です。わかりやすいですねw
個人開発は時間もお金もモチベーションも限りがあるので、できるだけシンプルなものをさっさと出した方が色々良いそうです。
👏モチベーション
イベントで発表した資料にまとめました。
まとめ
| おすすめ度 | |
|---|

個人開発がやりたくなる本: クリエイター13人の実録エッセイ
- 作者:IndieCoderJP
- 発売日: 2019/04/28
- メディア: Kindle版
深く掘り下げるタイプでは無いけど、幅広くさくっと読めるので、興味ある人はとりあえず読んでおいて損はないです。全く興味無い人にはちょっときついかな?
📚合わせて読みたい

小さなチーム、大きな仕事 働き方の新しいスタンダード (ハヤカワ文庫NF)
- 作者:ジェイソン フリード,デイヴィッド ハイネマイヤー ハンソン
- 出版社/メーカー: 早川書房
- 発売日: 2016/12/15
- メディア: Kindle版

- 作者:エリック・リース
- 出版社/メーカー: 日経BP
- 発売日: 2012/04/12
- メディア: 単行本
【勉強会】「個人開発がやりたくなるLT会」でLTしてきた

概要
「個人開発がやりたくなるLT会」という勉強会に参加してきました。
LT枠しかあまってなかったので、当日慌ててスライド作って発表もしてきました。(2日連続)
2019/12/14 追記
主催者さんがまとめていただけました。 morizyun.github.io
私の発表
イベントの主催の方も関わっている書籍を読んで、個人的に悩んでて刺さったところについてまとめて発表してきました。 昨日の反省を活かしてゆっくりしゃべってきた。

個人開発がやりたくなる本: クリエイター13人の実録エッセイ
- 作者:IndieCoderJP
- 発売日: 2019/04/29
- メディア: Kindle版
全体の感想
ただの感想
オフレコな話題が多くてあまり詳しくは書けないのですが、使っていたり知っているサービスを開発した方もちらほらいて、すごい刺激になりました。
現実的な悩みと、開発・プロダクトに対する熱い思いが共存していて、スタートアップ界隈とも全然違う独特の雰囲気でした。良かった。
紹介されて個人的気になった書籍
紹介されてた書籍たち📚
— ぁけぉめ (@akeome) 2019年12月11日
- 個人開発がやりたくなる本
- 小さなチーム、大きな仕事
- 管理ゼロで成果はあがる
- リーン・スタートアップ
- 時間術大全#AlchemyHackers

小さなチーム、大きな仕事 働き方の新しいスタンダード (ハヤカワ文庫NF)
- 作者:ジェイソン フリード,デイヴィッド ハイネマイヤー ハンソン
- 発売日: 2016/12/15
- メディア: Kindle版
存在は知ってたけど読んだ事なかったのでとりあえずポチりました。なお積ん読。

- 作者:エリック・リース
- 発売日: 2012/04/12
- メディア: 単行本
見事にみんな共通して言っていたのが、できるだけスモールにMVPを作ってさっさとリリースする、という事。
ずっと意識してるんですが、いざ自分が決める側に立つとできないものです。というわけで、再読したい。
#AlchemyHackers
— ダイスケ@日常アカウント (@moyashidaisuke) 2019年12月11日
普段ディレクター的な人に本当にそれ最初から必要ですか?って口酸っぱくなるほど行ってるのに、自分が決める立場になると全然できないのな、、、
また一歩他人に優しくなれた気がする
これは私が紹介した本。習慣をうまく味方につけましょうね〜という話の根拠として。 読んですぐ実践できたところもあるけど、まだまだやれそうな気がするので再読したい。
まとめ
というわけで、個人的タイムリーなネタでテンションあがった会でした。がんばろ〜
あと会場提供にご協力いたいだたリブセンスさんと、目黒.rbさん、ありがとうございました〜
2019/12/13 ご協力いただいた団体の名前を間違っておりましたので修正いたしました。申し訳ありません、、
【Flutter】Flutter Meetup Tokyo #13でLTしてきた

概要
前回オンライン参加だったFlutterMeetupTokyoに参加してきました。 当日LT枠が余ってたので急いでスライド作って発表もしてきました。
私の発表
www.slideshare.net
当日LT申し込んだので、ブログに書いたネタです。これ。
アウトプットすると反応もらえるので、ネタは何でも良いからLTするのは良いなと改めて思いました。オフラインの反応含めて全てはのせられないですが、ありがとうございました。
Twitterでいただいた知見
pub公開後は今の所消せないけれど、AdminメニューからDISCONTINUEDにすることはできます #flutter_meetup_tokyo
— 菊池紘 (@kikuchy) 2019年12月10日
Popularityでダウンロード統計が見られるようです https://t.co/iE2mU3YxlN #flutter_meetup_tokyo
— Cyanoa (@cyanoa0504) 2019年12月10日
いいねいただいた
発表前は自分で自分でいいねした1つだけだったのが3に増えてる👍

全体の感想
相変わらずネタがいくらでもあって、盛り上がってるな〜という感じでしたが、今回はデザイン周りのネタが多かったですね。
Flutterってまだ大規模チームでがっつり運用してる知見はそんなに無いはずで(新規プロダクトとかでお試し採用が多いイメージ)、デザイナーさんとの協業が1年後くらいに課題になりそう。
- Flutterは基本的に全部コードでデザインも書くので、デザイナーさんが直接Flutterを編集するのは敷居が超高い(マウスぐりぐりで調整したりできない
- Materialデザインが基本という縛り
- Flutter標準で用意されていないWidgetを実装しようとすると大変なので何が標準かを知っておかないといけない
- Storybookとか、デザイナーと協業するためのツールもデフェクトがまだ無い
Unityはデザイナーさんでも見た目の修正だけならできなくは無いくらいのUIになっていてなるほどな〜と思ったものです。(マウスじゃないとできない事がけっこうあって、プログラマー的にはイライラするけど)
ちゃんとしたまとめ
まとめ
運営のみなさま、聞いていただいたみなさま、懇親会でお話いただいたみなさま、ありがとうございました。
次回はもっとちゃんとしたネタを用意して発表したいなぁ😀
【PHP】【勉強会】大改修!PHPレガシーコードビフォーアフターに参加してきた

🤲概要
PHPの勉強会「大改修!PHPレガシーコードビフォーアフター」に参加してきました。
タイトルから想像される内容とは少し違いましたが(何をもってレガシーとするか)、良い切り口で大変おもしろかったです。
📚勉強会の概要
個人で開発しているwebサービス「fortee(ふぉるて)」の技術的負債を匠達が改善していく!
みたいな目論見だったのですが、実際には
- 一般的に想像されるより思ったよりレガシーじゃない
- PHP7系
- Cake3系
- docker使ってる
- テストちょっとだけどある
という事で、
雑目に作られたサービスを、ちゃんとした設計・運用にのっけるために必要なノウハウ集!
だったと思います。
サービスを新規開発する時とか、雑に運用してたけどちゃんとしよう!みたいな時のチェックリストのとっかかり(これだけでは足りないので)として良い感じだと思います。
🤔発表ごとの感想
スポンサーセッション / @suzukiさん
価値を提供しているコードはレガシーじゃない、レジェンドコードだ!
価値を生み出しているレガシーコードはレジェンドコードと呼ぶべき#phperkaigi
— 遠藤ヒズミ (@endo_hizumi) 2019年11月30日
レガシーだと技術的負債みたいなマイナスの言葉として捉えがちなので、中身はあれでもしっかりとユーザーに価値を提供しているコードはレジェンドコードとして尊敬しよう。
これはすごく良いですね。価値提供してないならサービス終了とか削除されちゃいますしね。
歴史的経由とかで今見るとあれだけど、ユーザーに価値を提供できているというのは偉大な事。
独立したコアレイヤパターンの適用 - fortee 編 - / @shin1x1さん
PHPStormの使いこなしがやばい。自分はまだまだだ、、、
ライブコーディングしてくれたのですが、PHPStormの使いこなしっぷりが気持ちよくて、見てて楽しいライブコーディングでした。すごい。
PHPプロジェクトに静的解析を新規導入する / @tadsanさん
静的解析をプロジェクトにいれてみよ〜
話として知ってはいたものの、「lintだけ入れとけばあとはレビューでなんとかなるっしょ」、という感覚で入れたことなかったですが、改心しました。
forteeに脆弱性検査をかけてみた VAddy編 / @cakephper(ichikaway)さん
今までZAPで雑にやってたけど、CIに組み込めるし使いやすそう
www.slideshare.net
セキュリティ大事ですよね、、、
ZAPに比べると、webエンジニアが使いやすそうでした。
レガシーなWebアプリケーションと向き合う / @blue_goheimochiさん
レガシー具合も「推測するな。計測せよ。」
www.slideshare.net
レガシーなコードって、感情的に「辛い」「触りたくない」みたいな感じになってしまうのですが、可視化できるところはすると、改修の指針としてすごく使いやすいなと思いました。エンジニア以外にも説明しやすいです。
Forteeをバージョンアップしてみた / @yakitori009さん
テストあるとバージョンアップの大変さが全然違うな〜
バージョンアップ、こまめにやらないときついな〜と改めて思いました。テスト大事。
その他資料まとめ
🤝まとめ
ありがとうレジェンドコード。
- 設計
- 静的解析
- 脆弱性診断
- レガシーさの計測
- バージョンアップ
と、運用してると向き合わないネタが色々な方面から取り上げられて、大変勉強になりました。
OSSだとすごい勢いで改善は進むだろうけど、全体で何が起きているかはわかりにくくなっちゃうので、あえてこのままプライベートなリポジトリにしておいた方が、ネタとしては面白いなと思いました。
第2回期待しています。
【ポエム】プログラムのコメント書く書かないについて

書く書かないの二択の問題じゃないです。
— ダイスケ@日常アカウント (@moyashidaisuke) 2019年11月2日
リーダブルコード読んで適切なコメントを書きましょう(適切でないコメントは書いてはいけない https://t.co/i732OlBFsX
これの補足です。
書き始めたら私の10年ちょいのエンジニア経験と、勉強してきた事が割と詰まった感じになりました。
チームで取り組もう
複数人での開発を想定していますが、個人開発の場合でも先月の自分は他人なので気にした方が良いでしょう。
まずはルールを守ろう
まず優先なのはチームのルールです。
- プロジェクト、会社にコーディング規約として明記されているか?
- 明記されていなくても暗黙的なルールはあるか?
- レビューでの指摘事項を眺める
- コードをざっと眺めてみる
- 現場の先輩に聞いてみる
まず上記を確認しましょう。
どんなにうんこ💩なルール(とあなたが思う)だとしても、もしルールがあるのであれば、まずはルールに従う事をおすすめします。あなたの考えとは違うかもしれませんが、そのルールになっているのには何かしらの理由があります。
また、他の人が書いたコードと規約をそろえる事で、プロジェクト全体のメンテ性を保つというのはとても大事な事です。あなた一人がそれをやぶろうとしても結局レビューでNGになるかもしれませんし、仮にレビューが通ったとしてもそれまでメンバーが心血を注いできた環境をあなたが壊す事になります。
あなた一人くらい、と思うかもしれませんが、割れた窓を放置してはいけません。あなた一人が規約をやぶると、みんなが破り始めます。あなたはそんな戦犯になってはいけません。
※割れ窓理論が気になる方は達人プログラマーを読みましょう www.s-arcana.co.jp

- 作者:Andrew Hunt,David Thomas
- 発売日: 2016/10/20
- メディア: 単行本(ソフトカバー)
もし今のルール(規約)がks💩だと思うなら、そのルールを変更しようとするのは悪い事ではありません。が、変更には適切なプロセスをもってなされるべきです。
前述の通り、その規約には何かしらの理由があるはずです。その必然性が納得行くものかどうか、チームとして取り組むべきです。
ルールを変えよう
もし今のルールが著しくチームの生産性を下げていて、価値を提供する事の邪魔になっているのであれば、変更を検討しましょう。
イソップ童話の1番目のレンガ職人のように、それがルールだから、と考える事を放棄してはいけません。機械的に言われた事を受け入れてそのまま取り組むのは、優れたプログラマーのする事ではありません。
コードと同じように、ルールも何もしないと品質が劣化していきます。継続的にリファクタしていくべきでしょう。当時は有効であったルールも、現在はかえって足かせになっているかもしれません。
が、この時気をつけないといけないのは、「ぼくがかんがえたさいきょうのこめんとるーる」をみんなに強要するような姿勢をとってはいけない、という事です。
- そのルールを考えた人
- そのルールを守る事に労力を割いてきた人
この先輩たちを貶めるような態度を取ってはいけません。
どんな正しい変更であっても、変更を受け入れて実践するにはエネルギーが必要です。チームとして取り組む課題である以上、彼らにも協力してもらえるように話をしないと、チーム内で軋轢を生むだけになるでしょう。
コメントのルールの決め方
では幸いにもコメントのルールを決められる、たたき台を考えられる環境に身を置けた場合、以下のような事に気をつけましょう。
コメントを書く目的を明確にする
コメントを書くのだって無料ではなく、貴重な工数を使って書く事になるので、なんのために書くのか、という目的は明確にした方が良いでしょう。
そんなのするまでもないぜ!と思うかもしれないが、意外と人によって考え方は違うものです。
またエンジニアリングに理解が無いマネージャーから「動作に関係ない事に工数はかけてはいけない」というありがたいご通達が来ても困らないように、コメントを書く事がどうしてプロジェクトのためになるのか、というのは明確にしておいて損はありません。
よくある大きな目的は以下にようなものでしょう。
- コードの可読性を高める
- 自分以外が担当した機能でもスムーズに取り掛かる事ができる
- なのでチーム全体の生産性が上がる
- 半年後の自分はコードの大半を忘れているので、やはり可読性に対する考慮は必要である
場合によってはコメントの行数で水増しする事によって納品物の水増しをして利益になっているかもしれませんし、バージョン管理を(GitやSVN等)を導入していないので、「誰がいつ何のために変更したのか」「このコードの所有者は誰なのか」を書いて管理するのも目的になるかもしれません。
※今どきバージョン管理を使わないなんてありえないと思う方もいるかもしれませんが、そんな事はありません。現にこのブログのcssはバージョン管理をする事ができません
世の中の標準を基準にする
一般的なルールに従う事は大きなメリットがあります。新規参画したメンバーが独自ルールにつまずいて開発のスタートに躓く事は減るでしょうし、そもそも標準のルールには標準になっただけの理由があります。
ある程度メジャーな言語であれば、誰が考えたコーディングルールを参考にしましょう。例えばJavaScriptであれば下記のリンクが参考になります。 qiita.com
使用しているフレームワークやライブラリのスタイルも参考になるでしょう。
また、javadocのようなドキュメンテーションツールの使用も検討するべきです。ツールに対応するフォーマットで記述していくだけで、全体的にそれなりのルール管理化に置かれる事でしょう。
また、以下の書籍も参考になるでしょう。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者:Dustin Boswell,Trevor Foucher
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)

- 作者:Robert C.Martin
- 発売日: 2017/12/18
- メディア: 単行本
メンバーとの相互理解を深める
コメントに関する考えは人それぞれです。またソースコードを読む人の技術レベルによって、「それはコードを読めば明白だからいらないでしょ」の基準が異なったりします。
あまり細かく決めすぎると窮屈になってしまいますので注意しつつ、どんな内容が有用なコメントなのか、という議論をメンバーとしましょう。(ここでもメンバーへのリスペクトは忘れずに)

Team Geek ―Googleのギークたちはいかにしてチームを作るのか
- 作者:Brian W. Fitzpatrick,Ben Collins-Sussman
- 発売日: 2013/07/20
- メディア: 単行本(ソフトカバー)
私のコメントの書き方についての考え方
と、ここまでコメントに対する取り組み方を述べてきましたが、ここからは私の考え方を述べます。 前提条件が無い、自分一人のプロジェクトの場合は以下のルールにする事が多いですが、プロジェクトやチームメンバーの好みによって、何が正しいかというのは左右されます。あくまで参考として。
コメントはできるだけ書かない
コメントは最終手段とします。なぜなら、コメントがただしいかどうかをテストする方法は無いからです。つまり、コードに比べると、コメントというのは著しくメンテ性が悪いという事です。
コメントを書いた時は正しかった事でも、仕様変更によって内容が古くなるかもしれません。それを検知する方法は関係ありそうなキーワードで全文をgrepして検索するか、たまたま目についた時に気がつくくらいしかありません。
動作確認をしたり、テストコードを書いたりという事ができないのです。
矛盾しているようですが、不必要なコメントを書く事は、メンテ性の悪化を招きます。
だから、コメントはできるだけ書かないべきです。(必要なコメントを書くなと言っているわけではありません)
できるだけツールを使う
xDocや、lint等のツールを使って、ルールの強制や書き方を自動化/定型化できないか検討します。 レビューで「ここはこのルールに従ってないよ」と指摘するのは、言う人も言われる人も多かれ少なかれエネルギーを消費します。面倒なことは機械にまかせましょう。
また、Git等のバージョン管理を使えば、変更日時や変更者のコメントは不要になります。例えばこんなのです。(SIer時代はこういうのいっぱい見ました、、今はどうなんでしょうか
/** 2019/01/01 moyashidaisuke 案件番号XXXのため変更 start */ 〜〜省略 /** 2019/01/01 moyashidaisuke 案件番号XXXのため変更 end */
世の中の標準を基準にする
前述の通りです。よっぽどエッジの効いた環境で無い限り、あなたが考えたルールは既に誰かが通った道です。車輪の再発明はやめて、あなたにしかできない事にエネルギーをそそぎましょう。
参考になりそうな標準ルールやコードを探してきて、ちょっと修正しておしまいです。もしその標準ルールに納得できないのであれば、チームメンバーでその規約や書籍についての勉強会を開くと、ついでに理解が深まって良いかもしれません。
まとめ
なんか口調が強くなってオライリーの翻訳本みたいになってしまいましたが、深い意味は無いです。私がそう思っているだけなので、今すぐみんなこれに従え〜とかじゃないです。私はこうだよ〜とかコメントいただけるとうれしいです。
用途別・個人的良く使うコマンドチートシート

メモ帳に書いてたのを雑に公開。小技系が多いです。
動作環境はMac + zsh環境がメインで、たまにlinuxです。たまにオプションとか違う場合もありますのでご注意。でも大体動くはずです。
随時追記します。
ファイルの行数
単純にカウント
cat hoge.txt | wc -l
行数の監視
watch -n 1 'cat hoge.txt | wc -l'
ログファイルとか、バッチの進捗確認に。
ログファイルの特定の項目を抜き出す
基本
cat xxxxx.log| awk '{print $7}'
$7は特定の項目のインデックス。数えるようりも適当に数字変えて動かしてみた方が早い。
特定の文字列が含まれる行のみ
cat xxxxx.log | grep info |awk '{print $7}'
infoに特定の文字列を設定
特定の文字列が含まれる行を除外
cat xxxxx.log | grep -v info |awk '{print $7}'
infoに特定の文字列を設定
複数列表示する
cat xxxxx.log| awk '{print $7 "\t" $8}'
tab文字で区切って出力するとエクセルとかに貼り付けた時に見やすい
結果の個数をカウントする
cat xxxxx.log |awk '{print $7}' | sort -n | uniq -c | sort -n
結果文字列を置換する
cat xxxxx.log |awk '{print $7}' | sed s/hoge/fuga/
↑だとhogeをfugaに置換する。fugaを空にすれば削除になる
コマンド履歴
検索する
history 0 | grep ls
0をつけると全部対象になる
検索結果から実行する
!100
historyの番号を指定して実行できる
ディレクトリ
権限を指定してディレクトリ作成
sudo mkdir -m 777 hogedir
ファイル名検索
find . -type f -name "*.text"
ファイルの中身で検索
find . -type f -print | xargs grep hoge
ファイルをマージする
ディレクトリ配下全部
cat ./* > merge.txt
今のディレクトリ配下のファイルをがっちゃんこしたファイルを作成。
特定のファイル
cat hoge.txt fuga.txt > merge.txt
ファイル転送(scp)
ローカルにもってくる
scp -r -P ポート番号 -i 鍵へのpath ユーザー@ホスト:ホスト側のpath ローカルのpath
例
scp -r -P 10000 -i ~/.ssh daisuke-fukuda@192.168.1.1:/var/log ./
-r はディレクトリを取得する時に必要。
その他
今のディレクトリをfinderで開く
open .
jsonを整形する
jqがインストールされてる前提。jqはいっぱいあるけど、とりあえずこれが一番使う。あとはヘルプみながら頑張る。
直接
echo '{ "name" : "John Smith", "sku" : "20223", "price" : 23.95, "shipTo" : { "name" : "Jane Smith", "address" : "123 Maple Street", "city" : "Pretendville", "state" : "NY", "zip" : "12345" }, "billTo" : { "name" : "John Smith", "address" : "123 Maple Street", "city" : "Pretendville", "state" : "NY", "zip" : "12345" } }' | jq .
ファイルから
cat hoge.json | jq .
クリップボードから
pbpaste | jq .
pbpasteがクリックボードからechoするコマンド。地味に便利。
【Flutter】Flutter Meetup Tokyo #12にオンライン参加してきた

概要
Flutterの勉強会に参加したので感想をさくっと。Flutter盛り上がってるな・・・という感じでした。
人気すぎて会場にいけなかったので、オンライン配信を見ての参加です。
配信Youtube https://www.youtube.com/watch?v=cbpgIbyGsPswww.youtube.com
ちゃんとしたまとめ
勉強会の感想
発表のレベルが高いなぁ
まだまだ新しい部類に入るFlutterなので、色々困っても自力でなんとかするパワーが必要で、そういったのを乗り越えられる方が発表されていた印象です。
Flutter勢いがあるなぁ
新しい設計思想だったり、言語の新機能だったり、ワクワクする要素がどんどん出てて、勢いがあるツールは良いな、、、と思いました。(安定感があるのももちろん大事ですが、技術的にはわくわくする方が好き)
この前Dartの2.5触ってはしゃいでましたが、もう2.6がリリース済だそうです。(stablechannelだけまだ)
https://www.moyashidaisuke.com/entry/flutter-1.9.1www.moyashidaisuke.com
勉強会の参加者数もすごいですしね(速攻で定員埋まってました)
オンライン参加の感想
そもそもオンライン配信の枠があるだけで大変ありがたかったです。運営の皆様ありがとうございました。
画面が足りない問題
オフラインだと、前に映し出した画面を見ながら、手元のPCでTwitterしたりメモしたり、という事が多いですが、オンラインだと画面が配信に占領されちゃうんですよね。 なので、サブモニタなりがある環境で無いと、リアルタイム配信を満喫できないと思いました。Twitterでみんなでわいわいしたかった。
懇親会
🍺🍺🍺🍺🍺
まとめ
次回は参加してなんか発表したい!🍺🍺🍺🍺🍺
【Flutter】Flutter1.9.1とDart2.5まとめ(Flutterのバージョンアップしました)

概要
Flutter(一緒にDartも)のバージョンアップをしました (1.7.8-> 1.9.1)
バージョンアップにあたりまとめた情報と、手順メモです。DartのML補完が面白かったです。
これすごくない??
途中のtypoはゆるしてね
— ダイスケ@日常アカウント (@moyashidaisuke) 2019年11月5日
文脈で変数名を推測してる。
date -> 日付関係だからtodayとかtommorowとか
time -> 時間関係だからtoUTCとか pic.twitter.com/QLqBK04UNo
現状
$ flutter --version Flutter 1.7.8+hotfix.4 • channel stable • https://github.com/flutter/flutter.git Framework • revision 20e59316b8 (4 months ago) • 2019-07-18 20:04:33 -0700 Engine • revision fee001c93f Tools • Dart 2.4.0 $ flutter doctor ╔════════════════════════════════════════════════════════════════════════════╗ ║ A new version of Flutter is available! ║ ║ ║ ║ To update to the latest version, run "flutter upgrade". ║ ╚════════════════════════════════════════════════════════════════════════════╝ Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, v1.7.8+hotfix.4, on Mac OS X 10.14.6 18G95, locale ja-JP) [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 10.3) [✓] iOS tools - develop for iOS devices [✓] Android Studio (version 3.5) [✓] Android Studio (version 3.5) [✓] VS Code (version 1.39.1) [!] Connected device ! No devices available $ flutter channel Flutter channels: beta dev master * stable
事前調査
flutterのchannel
Flutterのバージョンはchannel(チャンネル)という考え方で複数運用されています。
最新だけど不安定な順番で、
- master
- dev
- beta
- stable
となっています。
特別な理由がなければstableがおすすめされています。
自分の環境での設定を確認するコマンドは、
flutter channel
です。私は特別な理由が無いのでstable。
ちなみに切り替えたい場合は、
flutter channel 切り替えたいchannel flutter upgrade
だそうです。
channel毎のバージョンはここで確認ができます。
1.9.1の調査
stableの最新版は1.9.1なので、このバージョンの詳細を確認します。

releasenote
公式youtube
英語だけどわかりやすい
まとめ記事
まとめの個人的まとめ
自分が気になったところだけです。網羅はできてないのでご注意ください。
Catalinaサポート
macの新しいOSのCatalinaサポートです。
you’ll want to upgrade to the Flutter 1.9.1 stable release before upgrading to Catalina.
OSを更新する前にFlutterのバージョンアップする事が推奨されています。(こういうのがあるからMacOSの更新は慎重になった方が良い、、、)
iOS13サポート
iOS13でスクロールバーを直接操作できるようになったそうなのですが(自分はiOS13の端末もってないので、、)、これにWidgetも対応してくれるそうです。
Widgetの追加
Widget(FlutterのUIコンポーネント)がいくつか追加されています。
「New Material widgets」あたり。ToggleButtonsとColorFilteredだそうです。
ToggleButtonsは使いやすそうですね。
Dart2.5
ML Complete, code completions ranked by machine learning
!?
機械学習によるコード補完だそうです!(まだpreviewだけど)
あとはCコードを直接呼べるとか。パフォーマンス気にしてFlutterの導入を見送ってた勢には響くかもですね。
その他
リリースノートに全部書いてある。
Breaking API Changesもけっこうあるのだけど、多すぎて見きれない。更新が激しいからしょうが無いね、、、
バージョンアップする
flutter upgradeコマンド実行
$ flutter upgrade Upgrading Flutter from /Applications/flutter... From https://github.com/flutter/flutter + 20e59316b...68587a091 stable -> origin/stable (forced update) * [new branch] Hixie-patch-1 -> origin/Hixie-patch-1 * [new branch] Hixie-patch-2 -> origin/Hixie-patch-2 * [new branch] Hixie-patch-3 -> origin/Hixie-patch-3 * [new branch] Hixie-patch-4 -> origin/Hixie-patch-4 + 20e59316b...e70236e36 beta -> origin/beta (forced update) * [new branch] blasten-patch-1 -> origin/blasten-patch-1 0a39d8d92..1946fc4da dev -> origin/dev * [new branch] generated_explicit_type -> origin/generated_explicit_type * [new branch] hot_restart_lowercase_r -> origin/hot_restart_lowercase_r aa6384cba..9093cf15f master -> origin/master * [new branch] potato620-patch-1 -> origin/potato620-patch-1 * [new branch] refactor -> origin/refactor * [new branch] revert-37962-show-search-app-bar-theme -> origin/revert-37962-show-search-app-bar-theme * [new branch] revert-38861-use_frame_timings -> origin/revert-38861-use_frame_timings * [new branch] revert-38922-text-docs -> origin/revert-38922-text-docs * [new branch] revert-40607-animationOverview -> origin/revert-40607-animationOverview * [new branch] revert-40634-goldenTriageBenchmark -> origin/revert-40634-goldenTriageBenchmark * [new branch] revert-40710-flutterGold -> origin/revert-40710-flutterGold * [new branch] revert-40726-roll_branch -> origin/revert-40726-roll_branch * [new branch] revert-41415-exposeimage -> origin/revert-41415-exposeimage * [new branch] revert-41780-fix_build -> origin/revert-41780-fix_build * [new branch] sjindel.elf -> origin/sjindel.elf * [new branch] v1.9.1-hotfixes -> origin/v1.9.1-hotfixes * [new tag] v1.10.14 -> v1.10.14 * [new tag] v1.10.7 -> v1.10.7 * [new tag] v1.8.3 -> v1.8.3 * [new tag] v1.8.4 -> v1.8.4 * [new tag] v1.9.0 -> v1.9.0 * [new tag] v1.9.1 -> v1.9.1 * [new tag] v1.9.1+hotfix.1 -> v1.9.1+hotfix.1 * [new tag] v1.9.1+hotfix.2 -> v1.9.1+hotfix.2 * [new tag] v1.9.1+hotfix.3 -> v1.9.1+hotfix.3 * [new tag] v1.9.1+hotfix.4 -> v1.9.1+hotfix.4 * [new tag] v1.9.1+hotfix.5 -> v1.9.1+hotfix.5 * [new tag] v1.9.1+hotfix.6 -> v1.9.1+hotfix.6 * [new tag] v1.10.0 -> v1.10.0 * [new tag] v1.10.1 -> v1.10.1 * [new tag] v1.10.10 -> v1.10.10 * [new tag] v1.10.11 -> v1.10.11 * [new tag] v1.10.12 -> v1.10.12 * [new tag] v1.10.13 -> v1.10.13 * [new tag] v1.10.2 -> v1.10.2 * [new tag] v1.10.3 -> v1.10.3 * [new tag] v1.10.4 -> v1.10.4 * [new tag] v1.10.5 -> v1.10.5 * [new tag] v1.10.6 -> v1.10.6 * [new tag] v1.10.8 -> v1.10.8 * [new tag] v1.10.9 -> v1.10.9 * [new tag] v1.9.2 -> v1.9.2 * [new tag] v1.9.3 -> v1.9.3 * [new tag] v1.9.4 -> v1.9.4 * [new tag] v1.9.5 -> v1.9.5 * [new tag] v1.9.6 -> v1.9.6 * [new tag] v1.9.7 -> v1.9.7 Updating d51fd86cd..68587a091 PATENTS => PATENT_GRANT | 0 dev/automated_tests/icon/test.png | Bin 0 -> 423 bytes .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 11112 -> 10932 bytes dev/devicelab/images/agent-statuses.png | Bin 18399 -> 13842 bytes dev/devicelab/images/broken-test.png | Bin 69897 -> 56878 bytes dev/devicelab/images/legend.png | Bin 48845 -> 30220 bytes .../drawable-land-xxhdpi/flutter_splash_screen.png | Bin 0 -> 3861 bytes .../res/drawable-xxhdpi/flutter_splash_screen.png | Bin 0 -> 4428 bytes .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../mipmap-land-xxhdpi/flutter_splash_screen.png | Bin 0 -> 3861 bytes .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../res/mipmap-xxhdpi/flutter_splash_screen.png | Bin 0 -> 4428 bytes .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../AppIcon.appiconset/Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 11112 -> 10932 bytes .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 11112 -> 10932 bytes .../ios_host_app/Flutter/.gitkeep | 0 .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 11112 -> 10932 bytes dev/snippets/assets/code_sample.png | Bin 58572 -> 39037 bytes dev/snippets/assets/code_snippet.png | Bin 202228 -> 113476 bytes .../app/src/main/res/mipmap-hdpi/ic_background.png | Bin 18209 -> 2583 bytes .../app/src/main/res/mipmap-hdpi/ic_foreground.png | Bin 3581 -> 2063 bytes .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3951 -> 3116 bytes .../src/main/res/mipmap-xhdpi/ic_background.png | Bin 31807 -> 3231 bytes .../src/main/res/mipmap-xhdpi/ic_foreground.png | Bin 5455 -> 2721 bytes .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 5326 -> 3980 bytes .../src/main/res/mipmap-xxhdpi/ic_background.png | Bin 72301 -> 4963 bytes .../src/main/res/mipmap-xxhdpi/ic_foreground.png | Bin 10303 -> 4613 bytes .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 9650 -> 7167 bytes .../src/main/res/mipmap-xxxhdpi/ic_background.png | Bin 125855 -> 6802 bytes .../src/main/res/mipmap-xxxhdpi/ic_foreground.png | Bin 16499 -> 6155 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 13901 -> 9897 bytes .../AppIcon.appiconset/Icon-120.png | Bin 1787 -> 1750 bytes .../AppIcon.appiconset/Icon-152.png | Bin 2162 -> 2003 bytes .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes examples/image_list/images/coast.jpg | Bin 0 -> 202344 bytes .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 0 -> 11112 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../AppIcon.appiconset/Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3481 -> 3041 bytes .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2121 -> 1958 bytes .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 5061 -> 4372 bytes .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 8878 -> 7152 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 13629 -> 10393 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 7210 -> 5633 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 12818 -> 9562 bytes .../Assets.xcassets/AppIcon.appiconset/Icon-76.png | Bin 3804 -> 3115 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 10082 -> 7587 bytes .../AppIcon.appiconset/Icon-83.5@2x.png | Bin 11552 -> 8627 bytes .../AppIcon.appiconset/Icon-Notification@2x.png | Bin 1529 -> 1404 bytes .../AppIcon.appiconset/Icon-Notification@3x.png | Bin 2663 -> 2297 bytes .../AppIcon.appiconset/Icon-Small-40.png | Bin 1529 -> 1404 bytes .../AppIcon.appiconset/Icon-Small-40@2x.png | Bin 4058 -> 3282 bytes .../AppIcon.appiconset/Icon-Small-40@3x.png | Bin 7210 -> 5633 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 2518 -> 2164 bytes .../AppIcon.appiconset/Icon-Small@3x.png | Bin 4520 -> 3725 bytes .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 11112 -> 10932 bytes .../AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 11112 -> 10932 bytes .../test_data/basic_project.dart | 0 .../test_data/hot_reload_project.dart | 0 .../test_data/project.dart | 0 .../test_data/stepping_project.dart | 0 .../test_data/tests_project.dart | 0 1259 files changed, 85422 insertions(+), 20163 deletions(-) Current branch stable is up to date. Upgrading engine... Downloading Dart SDK from Flutter engine b863200c37df4ed378042de11c4e9ff34e4e58c9... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 2 263M 2 7678k 0 0 6394k 0 0:00:42 0:00:01 0:00:41 6393k 7 263M 7 20.6M 0 0 9623k 0 0:00:28 0:00:02 0:00:26 9619k 12 263M 12 32.8M 0 0 10.2M 0 0:00:25 0:00:03 0:00:22 10.2M 16 263M 16 43.6M 0 0 10.3M 0 0:00:25 0:00:04 0:00:21 10.3M 20 263M 20 55.3M 0 0 10.6M 0 0:00:24 0:00:05 0:00:19 11.1M 25 263M 25 67.8M 0 0 10.9M 0 0:00:24 0:00:06 0:00:18 12.0M 30 263M 30 79.4M 0 0 11.0M 0 0:00:23 0:00:07 0:00:16 11.7M 34 263M 34 90.9M 0 0 11.0M 0 0:00:23 0:00:08 0:00:15 11.6M 38 263M 38 102M 0 0 11.1M 0 0:00:23 0:00:09 0:00:14 11.8M 43 263M 43 115M 0 0 11.3M 0 0:00:23 0:00:10 0:00:13 12.0M 48 263M 48 127M 0 0 11.4M 0 0:00:23 0:00:11 0:00:12 11.9M 52 263M 52 139M 0 0 11.4M 0 0:00:23 0:00:12 0:00:11 11.9M 57 263M 57 151M 0 0 11.4M 0 0:00:23 0:00:13 0:00:10 12.0M 61 263M 61 163M 0 0 11.5M 0 0:00:22 0:00:14 0:00:08 12.1M 66 263M 66 175M 0 0 11.5M 0 0:00:22 0:00:15 0:00:07 11.9M 71 263M 71 188M 0 0 11.6M 0 0:00:22 0:00:16 0:00:06 12.0M 75 263M 75 200M 0 0 11.6M 0 0:00:22 0:00:17 0:00:05 12.1M 78 263M 78 207M 0 0 11.4M 0 0:00:23 0:00:18 0:00:05 11.3M 80 263M 80 211M 0 0 10.9M 0 0:00:23 0:00:19 0:00:04 9795k 80 263M 80 213M 0 0 10.5M 0 0:00:24 0:00:20 0:00:04 7811k 82 263M 82 218M 0 0 10.3M 0 0:00:25 0:00:21 0:00:04 6281k 87 263M 87 231M 0 0 10.4M 0 0:00:25 0:00:22 0:00:03 6461k 92 263M 92 244M 0 0 10.5M 0 0:00:25 0:00:23 0:00:02 7447k 97 263M 97 256M 0 0 10.5M 0 0:00:24 0:00:24 --:--:-- 9280k 100 263M 100 263M 0 0 10.6M 0 0:00:24 0:00:24 --:--:-- 10.7M Building flutter tool... Downloading android-arm-profile/darwin-x64 tools... 1.1s Downloading android-arm-release/darwin-x64 tools... 0.9s Downloading android-arm64-profile/darwin-x64 tools... 0.9s Downloading android-arm64-release/darwin-x64 tools... 0.8s Downloading android-x86 tools... 2.3s Downloading android-x64 tools... 2.4s Downloading android-arm tools... 1.5s Downloading android-arm-profile tools... 0.9s Downloading android-arm-release tools... 0.9s Downloading android-arm64 tools... 1.6s Downloading android-arm64-profile tools... 1.1s Downloading android-arm64-release tools... 0.9s Downloading ios tools... 4.3s Downloading ios-profile tools... 2.9s Downloading ios-release tools... 2.3s Downloading package sky_engine... 0.7s Downloading common tools... 1.5s Downloading common tools... 1.3s Downloading darwin-x64 tools... 3.8s Downloading libimobiledevice... 0.1s Downloading usbmuxd... 0.1s Downloading libplist... 0.1s Downloading openssl... 0.2s Downloading ideviceinstaller... 0.1s Downloading ios-deploy... 0.1s Flutter 1.7.8+hotfix.4 • channel stable • https://github.com/flutter/flutter.git Framework • revision 20e59316b8 (7 weeks ago) • 2019-09-13 19:46:58 -0700 Engine • revision b863200c37 Tools • Dart 2.4.0 Running flutter doctor... Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, v1.9.1+hotfix.6, on Mac OS X 10.14.6 18G95, locale ja-JP) [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 10.3) [✓] Android Studio (version 3.5) [✓] Android Studio (version 3.5) [✓] VS Code (version 1.39.1) [!] Connected device ! No devices available ! Doctor found issues in 1 category. ~/AndroidStudioProjects/english % flutter --version [master:english] Flutter 1.9.1+hotfix.6 • channel stable • https://github.com/flutter/flutter.git Framework • revision 68587a0916 (7 weeks ago) • 2019-09-13 19:46:58 -0700 Engine • revision b863200c37 Tools • Dart 2.5.0
更新されました。
AndroidStudioのプラグインも更新

エラー表示の設定変更
新機能をオンに。

※私の環境だとデフォルトでONでした
※公式Youtubeとはチェックボックスの位置が変わっています。
【推し機能】DartのML補完を有効
まだPreview機能なので、裏技的な設定でないと有効にならないみたいです。
Help -> FindAction -> 「Registry」と入力

「dart.server.additional.arguments 」に「--enable-completion-model」と設定して再起動

有効にするとこんな感じ。すごい。
途中のtypoはゆるしてね
— ダイスケ@日常アカウント (@moyashidaisuke) 2019年11月5日
文脈で変数名を推測してる。
date -> 日付関係だからtodayとかtommorowとか
time -> 時間関係だからtoUTCとか pic.twitter.com/QLqBK04UNo
flutter_export_environment.shをgitignore
わりと最近勝手に作られるようになった `flutter_export_environment.sh`、ついコミットしちゃったりしたけど、ちゃんと見たらファイル内容的に除外するべきだなと思い、デフォルトの.gitignoreテンプレートもそう変わってた
— mono (@_mono) 2019年9月12日
+ **/ios/Flutter/flutter_export_environment.shhttps://t.co/WRKme1jU6b
gitignoreファイルに **/ios/Flutter/flutter_export_environment.shを追加します。
まとめ
作業自体は特につまらずにできました。環境周りが綺麗でドハマリしにくいのがFlutterの良いところです。
あと、機械学習による補完すごいですね!(Dartが地味すぎて全然話題になってないけど、)新体験でした!
名前重要がより重要になりますね。適切な変数名とかをつけると補完もききやすくなって、より開発がスムーズになるという。
Dartあまり面白みが無い言語だと思ってたのですが、こういう攻め方は新しい。
【vue】Vue Styleguidistの使い方を説明⑤ 〜アンダーバーが勝手に省略される挙動対策〜

概要
Vue Styleguidistで、アンダーバーつなぎの文字を書くと、勝手にアンダーバー「_」が省略される挙動の対策です。(多分ReactのStyleguidistでも発生する)
「HOGE_HOGE_HOGE」 -> 「HOGEHOGEHOGE」になります。
今までの
どこのこと?何がダメなの?
こんな感じでかくと
/** * HOGE_HOGE_HOGEです <br> * PIYO_PIYOです <br> */ export default { }
こうなります

何が起きているの?
アンダーバーで文字列を囲むと、italicになってしまうようです、、、
よくみると、
となっていますね、、、
対応方法
「`」 バッククオートで囲みます。
/** * `HOGE_HOGE_HOGE`です <br> * PIYO_PIYOです <br> */ export default { }

できました。codeタグで囲まれちゃうので、余計なスペースついちゃいますが、、、うーん、、、😇
マニュアル
相変わらずわかりにくいですけど、exampleにしれっと書いてありました。
Text attributes: italic, bold,
monospace.
だそうです。
さがしてみたけど明示的にアンダーバーをエスケープする方法は見つけられず。うーん
【JavaScript】JSDocでfooterの作成日時を消す

概要
JavaScriptのドキュメンテンションツールのJSDocのfooterの日時を削除する方法です。
前回の
どこのこと?何がダメなの?
defaultテンプレートを使った時のフッターの

ここのことです。
CIで毎回JSDocを自動的にビルドして、生成されたhtmlファイルをコミットしない運用であれば特に問題はありません。むしろ最新版である事がわかって良いですね。
一方で、CIにJSDocを組み込んでいない場合、生成されたHTMLをコミットする事になります。 その時に、この更新日時が表示されると、全ファイルに必ずdiffが発生する事になります。リポジトリは誇大化するし、本当の差分が埋もれてしまうのであまりよくありません。
対応方法
なんかcloseされてなかったのでコメントしていますが、
マニュアル
設定ファイル
'use strict'; module.exports = { "templates": { "default": { "includeDate": false } }
これでfooterから作成日時が消えます。

まあ本当はCIに組み込んだ方がいいんですけどね。


