もやぶろ

moyashidaisukeのブログだからもやぶろ。フリーランスのエンジニアのダイスケです。QOLあげて色々楽しくチャレンジして良く生きたい。プログラム関連とかギター関連とか旅行関連とか色々。

最速でdockerでwordpressの開発環境(ローカル環境)を立ち上げる方法

wordpressをdockerで立ち上げる手順は公式を含めて色々な方が書かれていますので、設定ファイルをgithubにあげてできるだけ簡単にできるようにしました。

めんどうな説明は良いからとりあえず動かしたいんじゃい!というせっかちな方は是非使ってみてください。

対象

  • ある程度コマンドラインでの操作ができる方
  • dockerとdocker-composeがセットアップ済の方

すぐ動かしたい方向け

設定ファイルをダウンロードする

設定ファイルが置いてあるリポジトリです。 github.com

右上の「Clone or Download」をクリックして、出てきたポップアップの「Download zip」をクリックしてください。 f:id:moyashidaisuke:20200215225625p:plain

ダウンロードしたファイルを解凍する

ダウンロードされた「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を表示する

http://localhost:8080/

を叩いて、wordpressの画面が出てくれば成功です。

f:id:moyashidaisuke:20200215230526p:plain

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につなぎたい

f:id:moyashidaisuke:20200215233616p:plain

↑の画像は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

nuxtjsの最初でつまずいた。 | SEとDIY

【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

[v2] Error: Cannot find module 'core-js/modules/es6.array.filter' · Issue #7862 · gatsbyjs/gatsby · GitHub

error core-js/modules/ ... when updating to 7.5.0 · Issue #2390 · firebase/firebase-js-sdk · GitHub

core-js dependency breaks when using nuxt in monorepo with another package that's using newer core-js · Issue #6336 · nuxt/nuxt.js · GitHub

まとめると、どうもcore.jsの2系と3系が混在すると色々なところで色々起きるらしいです。(babel周りの知識があやふやなのでちゃんと理解できなかったのだけど)

私の場合、firebaseを入れることによって2系と3系が両方入ってしまい、nuxt側でうまくハンドリングできていなかったのを、明示的に3を使う指定する事でうまくいきました。

ちなみに、firebaseのcore.jsへの依存関係はここらへんです。

firebase-js-sdk/yarn.lock at 6898eb8996bfd42ca8220cb91acebf4569d64ddf · firebase/firebase-js-sdk · GitHub

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

自動投稿結果

作り方

もう作ってくれた方がいらっしゃっいました。マジ感謝。

www.stray-scrapbook.work

基本この通りなのですが、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限定で良い感じにフォントを描画してくれるようです。

私の環境ではこれを入れると文字がシャープになってすごいスッキリしました。今回の変更で一番効きました。

というわけではてなブログの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の画像撮り忘れてしまったのですが、だいぶすっきりしました。

f:id:moyashidaisuke:20200113224737p:plain

今までのMinimalismの修正

www.moyashidaisuke.com

【書評】「個人開発がやりたくなる本: クリエイター13人の実録エッセイ」はタイトル通り個人開発がやりたくなるよ

🤓はじめに

「個人開発がやりたくなる本: クリエイター13人の実録エッセイ」を読みました。

さくっと読めますし、内容も幅広いので、個人開発に興味ある・やっている人には何かしら刺さると思います👍

🐼読んだきっかけ・理由は?

自分は個人開発を始めていてモチベーションに悩んでいたのがスタートだよ

この本関連のイベントに参加する事になったのが直接的なきっかけ。

イベントに参加した理由自体が、個人開発しててモチベーションについて悩んでいたのですが、この本と、イベントで大いに刺激を受けました👍

👆この本の概要

個人開発の色々について書いた本だよ!

👆概要

個人開発者13名による、個人開発の体験談をまとめた合同誌です! WEBサービスやスマホアプリを開発するコツ、失敗談やバズった話、他では言えないお財布事情まで! これから個人開発を始めたい方、サービスを運営中の方におすすめです!

Amazonでの紹介文から引用

個人開発って?

一人で(2、3人だったら許容される場合もありますが)、サービスとかアプリを開発してリリースする事です。

普通サービス(はてなブログとかTwitterとかなんでもいいんですが)を開発する場合、仕事でチームを組んでやりますが、一人で企画、開発、デザイン、サポート、何でもやっちゃうスタイルですね。

⏳所要時間

1時間くらい。さらさらっと読めます。

🙆‍♂️どんな悩みを持つ人にオススメ?

  • プログラム始めたけど何作っていいかわからない
  • 副業的に何かサービス/アプリ作ってみようと思ってるけど踏ん切れない
  • もう個人でサービス/アプリを作ってるけど色々困ってる
  • もう個人でサービス/アプリをリリースしてるけど色々困ってる

🙅‍♂️逆におすすめしない人

  • 副業でサービス作って楽にがっぽがっぽ稼ぎたいぜ!

🤔読むと得られること

個人開発をする上での始め方、技術、お金周り、モチベーション、ポエム系、と幅広いテーマが扱われていますので、自分の悩みによって色々得られるものが変わります。(自分の場合はモチベーション)

悩みが変わったタイミングで読み直すと、また新たな気付きを得られるでしょう。

あと、作者さんは大体Twitterやってますので、つながりにいったりするのも良いですね。

📖同じジャンルの本との比較

個別で技術とかお金周り(マーケティング)について書いてある本はたくさんありますが、個人開発という切り口で幅広く扱った本は珍しい(他に私は知らない)です。

😺本から学んだこと・ココロに残った言葉

信仰ポイント

熱量よりも分かりやすいな〜

ユーザーの熱量を表しているのですが、直感的でわかりやすいなと思いました。

  • 満足度が高いと上がる
  • 忍耐力が上がる
  • 伝染する
  • 後から信仰者が入ると下がる

サービスとかゲームとか、バンドとかでもこういうのありますよね。

  • すごい好きなバンドを見つける
  • かっこいいライブを見せてくれると上がる
  • たまに活動休止したりごたごたが合っても待つ
  • 人に勧めたくなる
  • メジャーデビューすると最初は「儂が育てた」気分になるが、だんだんフェードアウトしてしまう

信仰は直接は目に見えないので信仰ポイントも見えないですが、意識しておくと面白いですね。

ガウディらない

完成しないあれね!

f:id:moyashidaisuke:20191213121531j:plain

すごく壮大なものを作ろうとして一生完成しない事を表す造語です。わかりやすいですねw

個人開発は時間もお金もモチベーションも限りがあるので、できるだけシンプルなものをさっさと出した方が色々良いそうです。

👏モチベーション

イベントで発表した資料にまとめました。

speakerdeck.com

まとめ

おすすめ度 

深く掘り下げるタイプでは無いけど、幅広くさくっと読めるので、興味ある人はとりあえず読んでおいて損はないです。全く興味無い人にはちょっときついかな?

📚合わせて読みたい

リーン・スタートアップ

リーン・スタートアップ

時間術大全――人生が本当に変わる「87の時間ワザ」

時間術大全――人生が本当に変わる「87の時間ワザ」

www.moyashidaisuke.com

【勉強会】「個人開発がやりたくなるLT会」でLTしてきた

概要

「個人開発がやりたくなるLT会」という勉強会に参加してきました。

LT枠しかあまってなかったので、当日慌ててスライド作って発表もしてきました。(2日連続)

alchemy-rb.connpass.com

2019/12/14 追記

主催者さんがまとめていただけました。 morizyun.github.io

私の発表

speakerdeck.com

イベントの主催の方も関わっている書籍を読んで、個人的に悩んでて刺さったところについてまとめて発表してきました。 昨日の反省を活かしてゆっくりしゃべってきた。

全体の感想

ただの感想

オフレコな話題が多くてあまり詳しくは書けないのですが、使っていたり知っているサービスを開発した方もちらほらいて、すごい刺激になりました。

現実的な悩みと、開発・プロダクトに対する熱い思いが共存していて、スタートアップ界隈とも全然違う独特の雰囲気でした。良かった。

紹介されて個人的気になった書籍


存在は知ってたけど読んだ事なかったのでとりあえずポチりました。なお積ん読


リーン・スタートアップ

リーン・スタートアップ

見事にみんな共通して言っていたのが、できるだけスモールにMVPを作ってさっさとリリースする、という事。

ずっと意識してるんですが、いざ自分が決める側に立つとできないものです。というわけで、再読したい。


これは私が紹介した本。習慣をうまく味方につけましょうね〜という話の根拠として。 読んですぐ実践できたところもあるけど、まだまだやれそうな気がするので再読したい。

まとめ

というわけで、個人的タイムリーなネタでテンションあがった会でした。がんばろ〜

あと会場提供にご協力いたいだたリブセンスさんと、目黒.rbさん、ありがとうございました〜

2019/12/13 ご協力いただいた団体の名前を間違っておりましたので修正いたしました。申し訳ありません、、

【Flutter】Flutter Meetup Tokyo #13でLTしてきた

概要

前回オンライン参加だったFlutterMeetupTokyoに参加してきました。 当日LT枠が余ってたので急いでスライド作って発表もしてきました。

flutter-jp.connpass.com

私の発表

www.slideshare.net

当日LT申し込んだので、ブログに書いたネタです。これ。

アウトプットすると反応もらえるので、ネタは何でも良いからLTするのは良いなと改めて思いました。オフラインの反応含めて全てはのせられないですが、ありがとうございました。

Twitterでいただいた知見

いいねいただいた

発表前は自分で自分でいいねした1つだけだったのが3に増えてる👍

f:id:moyashidaisuke:20191211134052p:plain

全体の感想

相変わらずネタがいくらでもあって、盛り上がってるな〜という感じでしたが、今回はデザイン周りのネタが多かったですね。

Flutterってまだ大規模チームでがっつり運用してる知見はそんなに無いはずで(新規プロダクトとかでお試し採用が多いイメージ)、デザイナーさんとの協業が1年後くらいに課題になりそう。

  • Flutterは基本的に全部コードでデザインも書くので、デザイナーさんが直接Flutterを編集するのは敷居が超高い(マウスぐりぐりで調整したりできない
  • Materialデザインが基本という縛り
  • Flutter標準で用意されていないWidgetを実装しようとすると大変なので何が標準かを知っておかないといけない
  • Storybookとか、デザイナーと協業するためのツールもデフェクトがまだ無い

Unityはデザイナーさんでも見た目の修正だけならできなくは無いくらいのUIになっていてなるほどな〜と思ったものです。(マウスじゃないとできない事がけっこうあって、プログラマー的にはイライラするけど)

ちゃんとしたまとめ

qiita.com

まとめ

運営のみなさま、聞いていただいたみなさま、懇親会でお話いただいたみなさま、ありがとうございました。

次回はもっとちゃんとしたネタを用意して発表したいなぁ😀

【PHP】【勉強会】大改修!PHPレガシーコードビフォーアフターに参加してきた

🤲概要

PHPの勉強会「大改修!PHPレガシーコードビフォーアフター」に参加してきました。

タイトルから想像される内容とは少し違いましたが(何をもってレガシーとするか)、良い切り口で大変おもしろかったです。

phperkaigi.connpass.com

📚勉強会の概要

個人で開発しているwebサービス「fortee(ふぉるて)」の技術的負債を匠達が改善していく!

みたいな目論見だったのですが、実際には

  • 一般的に想像されるより思ったよりレガシーじゃない
    • PHP7系
    • Cake3系
    • docker使ってる
    • テストちょっとだけどある

という事で、

雑目に作られたサービスを、ちゃんとした設計・運用にのっけるために必要なノウハウ集!

だったと思います。

サービスを新規開発する時とか、雑に運用してたけどちゃんとしよう!みたいな時のチェックリストのとっかかり(これだけでは足りないので)として良い感じだと思います。

🤔発表ごとの感想

スポンサーセッション / @suzukiさん

価値を提供しているコードはレガシーじゃない、レジェンドコードだ!

レガシーだと技術的負債みたいなマイナスの言葉として捉えがちなので、中身はあれでもしっかりとユーザーに価値を提供しているコードはレジェンドコードとして尊敬しよう。

これはすごく良いですね。価値提供してないならサービス終了とか削除されちゃいますしね。

歴史的経由とかで今見るとあれだけど、ユーザーに価値を提供できているというのは偉大な事。

独立したコアレイヤパターンの適用 - fortee 編 - / @shin1x1さん

PHPStormの使いこなしがやばい。自分はまだまだだ、、、

speakerdeck.com

ライブコーディングしてくれたのですが、PHPStormの使いこなしっぷりが気持ちよくて、見てて楽しいライブコーディングでした。すごい。

PHPプロジェクトに静的解析を新規導入する / @tadsanさん

静的解析をプロジェクトにいれてみよ〜

www.pixiv.net

話として知ってはいたものの、「lintだけ入れとけばあとはレビューでなんとかなるっしょ」、という感覚で入れたことなかったですが、改心しました。

forteeに脆弱性検査をかけてみた VAddy編 / @cakephper(ichikaway)さん

今までZAPで雑にやってたけど、CIに組み込めるし使いやすそう

www.slideshare.net

セキュリティ大事ですよね、、、

ZAPに比べると、webエンジニアが使いやすそうでした。

レガシーなWebアプリケーションと向き合う / @blue_goheimochiさん

レガシー具合も「推測するな。計測せよ。」

www.slideshare.net

レガシーなコードって、感情的に「辛い」「触りたくない」みたいな感じになってしまうのですが、可視化できるところはすると、改修の指針としてすごく使いやすいなと思いました。エンジニア以外にも説明しやすいです。

Forteeをバージョンアップしてみた / @yakitori009さん

テストあるとバージョンアップの大変さが全然違うな〜

speakerdeck.com

バージョンアップ、こまめにやらないときついな〜と改めて思いました。テスト大事。

その他資料まとめ

togetter.com

togetter.com

🤝まとめ

ありがとうレジェンドコード。

  • 設計
  • 静的解析
  • 脆弱性診断
  • レガシーさの計測
  • バージョンアップ

と、運用してると向き合わないネタが色々な方面から取り上げられて、大変勉強になりました。

OSSだとすごい勢いで改善は進むだろうけど、全体で何が起きているかはわかりにくくなっちゃうので、あえてこのままプライベートなリポジトリにしておいた方が、ネタとしては面白いなと思いました。

第2回期待しています。

【ポエム】プログラムのコメント書く書かないについて

これの補足です。

書き始めたら私の10年ちょいのエンジニア経験と、勉強してきた事が割と詰まった感じになりました。

チームで取り組もう

複数人での開発を想定していますが、個人開発の場合でも先月の自分は他人なので気にした方が良いでしょう。

まずはルールを守ろう

まず優先なのはチームのルールです。

  • プロジェクト、会社にコーディング規約として明記されているか?
  • 明記されていなくても暗黙的なルールはあるか?
    • レビューでの指摘事項を眺める
    • コードをざっと眺めてみる
    • 現場の先輩に聞いてみる

まず上記を確認しましょう。

どんなにうんこ💩なルール(とあなたが思う)だとしても、もしルールがあるのであれば、まずはルールに従う事をおすすめします。あなたの考えとは違うかもしれませんが、そのルールになっているのには何かしらの理由があります。

また、他の人が書いたコードと規約をそろえる事で、プロジェクト全体のメンテ性を保つというのはとても大事な事です。あなた一人がそれをやぶろうとしても結局レビューでNGになるかもしれませんし、仮にレビューが通ったとしてもそれまでメンバーが心血を注いできた環境をあなたが壊す事になります。

あなた一人くらい、と思うかもしれませんが、割れた窓を放置してはいけません。あなた一人が規約をやぶると、みんなが破り始めます。あなたはそんな戦犯になってはいけません。

割れ窓理論が気になる方は達人プログラマーを読みましょう www.s-arcana.co.jp

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

もし今のルール(規約)がks💩だと思うなら、そのルールを変更しようとするのは悪い事ではありません。が、変更には適切なプロセスをもってなされるべきです。

前述の通り、その規約には何かしらの理由があるはずです。その必然性が納得行くものかどうか、チームとして取り組むべきです。

ルールを変えよう

もし今のルールが著しくチームの生産性を下げていて、価値を提供する事の邪魔になっているのであれば、変更を検討しましょう。

イソップ童話の1番目のレンガ職人のように、それがルールだから、と考える事を放棄してはいけません。機械的に言われた事を受け入れてそのまま取り組むのは、優れたプログラマーのする事ではありません。

www.total-engagement.jp

コードと同じように、ルールも何もしないと品質が劣化していきます。継続的にリファクタしていくべきでしょう。当時は有効であったルールも、現在はかえって足かせになっているかもしれません。

が、この時気をつけないといけないのは、「ぼくがかんがえたさいきょうのこめんとるーる」をみんなに強要するような姿勢をとってはいけない、という事です。

  • そのルールを考えた人
  • そのルールを守る事に労力を割いてきた人

この先輩たちを貶めるような態度を取ってはいけません。

どんな正しい変更であっても、変更を受け入れて実践するにはエネルギーが必要です。チームとして取り組む課題である以上、彼らにも協力してもらえるように話をしないと、チーム内で軋轢を生むだけになるでしょう。

人を動かす 文庫版

人を動かす 文庫版

コメントのルールの決め方

では幸いにもコメントのルールを決められる、たたき台を考えられる環境に身を置けた場合、以下のような事に気をつけましょう。

コメントを書く目的を明確にする

コメントを書くのだって無料ではなく、貴重な工数を使って書く事になるので、なんのために書くのか、という目的は明確にした方が良いでしょう。

そんなのするまでもないぜ!と思うかもしれないが、意外と人によって考え方は違うものです。

またエンジニアリングに理解が無いマネージャーから「動作に関係ない事に工数はかけてはいけない」というありがたいご通達が来ても困らないように、コメントを書く事がどうしてプロジェクトのためになるのか、というのは明確にしておいて損はありません。

よくある大きな目的は以下にようなものでしょう。

  • コードの可読性を高める
    • 自分以外が担当した機能でもスムーズに取り掛かる事ができる
    • なのでチーム全体の生産性が上がる
    • 半年後の自分はコードの大半を忘れているので、やはり可読性に対する考慮は必要である

場合によってはコメントの行数で水増しする事によって納品物の水増しをして利益になっているかもしれませんし、バージョン管理を(GitやSVN等)を導入していないので、「誰がいつ何のために変更したのか」「このコードの所有者は誰なのか」を書いて管理するのも目的になるかもしれません。

※今どきバージョン管理を使わないなんてありえないと思う方もいるかもしれませんが、そんな事はありません。現にこのブログのcssはバージョン管理をする事ができません

世の中の標準を基準にする

一般的なルールに従う事は大きなメリットがあります。新規参画したメンバーが独自ルールにつまずいて開発のスタートに躓く事は減るでしょうし、そもそも標準のルールには標準になっただけの理由があります。

ある程度メジャーな言語であれば、誰が考えたコーディングルールを参考にしましょう。例えばJavaScriptであれば下記のリンクが参考になります。 qiita.com

使用しているフレームワークやライブラリのスタイルも参考になるでしょう。

また、javadocのようなドキュメンテーションツールの使用も検討するべきです。ツールに対応するフォーマットで記述していくだけで、全体的にそれなりのルール管理化に置かれる事でしょう。

また、以下の書籍も参考になるでしょう。

Clean Code アジャイルソフトウェア達人の技

Clean Code アジャイルソフトウェア達人の技

メンバーとの相互理解を深める

コメントに関する考えは人それぞれです。またソースコードを読む人の技術レベルによって、「それはコードを読めば明白だからいらないでしょ」の基準が異なったりします。

あまり細かく決めすぎると窮屈になってしまいますので注意しつつ、どんな内容が有用なコメントなのか、という議論をメンバーとしましょう。(ここでもメンバーへのリスペクトは忘れずに)

私のコメントの書き方についての考え方

と、ここまでコメントに対する取り組み方を述べてきましたが、ここからは私の考え方を述べます。 前提条件が無い、自分一人のプロジェクトの場合は以下のルールにする事が多いですが、プロジェクトやチームメンバーの好みによって、何が正しいかというのは左右されます。あくまで参考として。

コメントはできるだけ書かない

コメントは最終手段とします。なぜなら、コメントがただしいかどうかをテストする方法は無いからです。つまり、コードに比べると、コメントというのは著しくメンテ性が悪いという事です。

コメントを書いた時は正しかった事でも、仕様変更によって内容が古くなるかもしれません。それを検知する方法は関係ありそうなキーワードで全文を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/

↑だとhogefugaに置換する。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盛り上がってるな・・・という感じでした。

人気すぎて会場にいけなかったので、オンライン配信を見ての参加です。

flutter-jp.connpass.com

配信Youtube https://www.youtube.com/watch?v=cbpgIbyGsPswww.youtube.com

ちゃんとしたまとめ

qiita.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補完が面白かったです。

これすごくない??

現状

$ 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

github.com

Flutterのバージョンはchannel(チャンネル)という考え方で複数運用されています。

最新だけど不安定な順番で、

  1. master
  2. dev
  3. beta
  4. stable

となっています。 特別な理由がなければstableがおすすめされています。

自分の環境での設定を確認するコマンドは、

flutter channel    

です。私は特別な理由が無いのでstable

ちなみに切り替えたい場合は、

flutter channel 切り替えたいchannel
flutter upgrade

だそうです。

channel毎のバージョンはここで確認ができます。

flutter.dev

1.9.1の調査

stableの最新版は1.9.1なので、このバージョンの詳細を確認します。

f:id:moyashidaisuke:20191105144532p:plain

releasenote

github.com

公式youtube

www.youtube.com

英語だけどわかりやすい

まとめ記事

medium.com

medium.com

まとめの個人的まとめ

自分が気になったところだけです。網羅はできてないのでご注意ください。

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も対応してくれるそうです。

dekiru.net

Widgetの追加

Widget(FlutterのUIコンポーネント)がいくつか追加されています。

developers.googleblog.com

「New Material widgets」あたり。ToggleButtonsColorFilteredだそうです。 ToggleButtonsは使いやすそうですね。

Dart2.5

medium.com

ML Complete, code completions ranked by machine learning

!?

機械学習によるコード補完だそうです!(まだpreviewだけど)

あとはCコードを直接呼べるとか。パフォーマンス気にしてFlutterの導入を見送ってた勢には響くかもですね。

その他

github.com

リリースノートに全部書いてある。

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のプラグインも更新

f:id:moyashidaisuke:20191105190408p:plain

エラー表示の設定変更

新機能をオンに。

f:id:moyashidaisuke:20191105190527p:plain

※私の環境だとデフォルトでONでした

※公式Youtubeとはチェックボックスの位置が変わっています。

【推し機能】DartのML補完を有効

github.com

まだPreview機能なので、裏技的な設定でないと有効にならないみたいです。

Help -> FindAction -> 「Registry」と入力

f:id:moyashidaisuke:20191105191012p:plain

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

f:id:moyashidaisuke:20191105191203p:plain

有効にするとこんな感じ。すごい。

flutter_export_environment.shをgitignore

gitignoreファイルに **/ios/Flutter/flutter_export_environment.shを追加します。

まとめ

作業自体は特につまらずにできました。環境周りが綺麗でドハマリしにくいのがFlutterの良いところです。

あと、機械学習による補完すごいですね!(Dartが地味すぎて全然話題になってないけど、)新体験でした!

名前重要がより重要になりますね。適切な変数名とかをつけると補完もききやすくなって、より開発がスムーズになるという。

Dartあまり面白みが無い言語だと思ってたのですが、こういう攻め方は新しい。

【vue】Vue Styleguidistの使い方を説明⑤ 〜アンダーバーが勝手に省略される挙動対策〜

概要

Vue Styleguidistで、アンダーバーつなぎの文字を書くと、勝手にアンダーバー「_」が省略される挙動の対策です。(多分ReactのStyleguidistでも発生する)

HOGE_HOGE_HOGE」 -> 「HOGEHOGEHOGE」になります。

今までの

www.moyashidaisuke.com

www.moyashidaisuke.com

www.moyashidaisuke.com

www.moyashidaisuke.com

どこのこと?何がダメなの?

こんな感じでかくと

/**
 * HOGE_HOGE_HOGEです <br>
 * PIYO_PIYOです <br>
 */
export default {

}

こうなります

f:id:moyashidaisuke:20191031232138p:plain

何が起きているの?

アンダーバーで文字列を囲むと、italicになってしまうようです、、、

よくみると、

HOGEHOGEHOGE

となっていますね、、、

対応方法

「`」 バッククオートで囲みます。


/**
 * `HOGE_HOGE_HOGE`です <br>
 * PIYO_PIYOです <br>
 */
export default {

}

f:id:moyashidaisuke:20191031233113p:plain

できました。codeタグで囲まれちゃうので、余計なスペースついちゃいますが、、、うーん、、、😇

マニュアル

相変わらずわかりにくいですけど、exampleにしれっと書いてありました。

vue-styleguidist.github.io

https://raw.githubusercontent.com/vue-styleguidist/vue-styleguidist/dev/examples/sections/docs/One.md

Text attributes: italic, bold, monospace.

だそうです。

さがしてみたけど明示的にアンダーバーをエスケープする方法は見つけられず。うーん

【JavaScript】JSDocでfooterの作成日時を消す

概要

JavaScriptのドキュメンテンションツールのJSDocのfooterの日時を削除する方法です。

前回の

www.moyashidaisuke.com

どこのこと?何がダメなの?

defaultテンプレートを使った時のフッターの

f:id:moyashidaisuke:20191030205036p:plain

ここのことです。

CIで毎回JSDocを自動的にビルドして、生成されたhtmlファイルをコミットしない運用であれば特に問題はありません。むしろ最新版である事がわかって良いですね。

一方で、CIにJSDocを組み込んでいない場合、生成されたHTMLをコミットする事になります。 その時に、この更新日時が表示されると、全ファイルに必ずdiffが発生する事になります。リポジトリは誇大化するし、本当の差分が埋もれてしまうのであまりよくありません。

対応方法

github.com

なんかcloseされてなかったのでコメントしていますが、

マニュアル

jsdoc.app

ソースコード

github.com

設定ファイル

'use strict';

module.exports = {
  "templates": {
    "default": {
      "includeDate": false
    }
  }

これでfooterから作成日時が消えます。

f:id:moyashidaisuke:20191030205525p:plain

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