かあちゃんエンジニアの気まぐれ開発メモ

フリーランス15年から足を洗ったかあちゃんエンジニアの技術メモ

【Docker】ログがどこだかわかんない件

肥大化したログファイル

ローカル環境の動作確認で、Dockerが大活躍なんですけど。 どうもログファイルがどんどこ大きくなってる気がする。

  dokcer logs ${コンテナID}

でログを確認すると、どわーーーーーーーーーーって出てきて。もう止まらん。 これは、一旦クリアしたいぜ。

そもそもどこにあるのよ?

ありがたきネット先生さまさま。

このコマンドでわかるとのこと。

   docker inspect ${コンテナID} | grep -i log
        "LogPath": "/var/lib/docker/containers/42717343b3b7188304007796f66020e45a6c47a9d82c7a40204be464b80c7caa/42717343b3b7188304007796f66020e45a6c47a9d82.....4be464b80c7caa-json.log",
            "LogConfig": {

でもさ。どういうわけだか、いないの。

ls /var/lib/docker/containers
ls: /var/lib/docker/containers: No such file or directory

こまった母さん。

みいつけた!

コンテナログは、MacOSホストではなくDocker for Mac VMに保存されるそうです。 で、VMにアクセスしてから、ログファイルをクリアしたいのだが、 VMへのアクセス方法が変わっている様子。

私のMac環境だと、この方法が有効でした。

socat -d -d ~/Library/Containers/com.docker.docker/Data/debug-shell.sock pty,rawer

socat がないよっていう場合は、インストールする。

brew install socat

で、socatコマンドでttysの番号などを確認

socat -d -d ~/Library/Containers/com.docker.docker/Data/debug-shell.sock pty,rawer

2022/03/16 16:52:37 socat[13940] N successfully connected from local address LEN=16 AF=1 ""
2022/03/16 16:52:37 socat[13940] N successfully connected via 
2022/03/16 16:52:37 socat[13940] N PTY is /dev/ttys004
2022/03/16 16:52:37 socat[13940] N starting data transfer loop with FDs [5,5] and [6,6]

別のターミナルを開き。

screen /dev/ttys0xx

このttys0xxはsocatで出力された番号と合わせる。

で無事、VMに入ることができました!

  ls /var/lib/docker/containers/

で確認すると、いたよーーーーーー!! ログ発見。めでたしめでたし。

参考にさせていただきました。

socatでの接続方法【2022/03/16現在、私のMacでは有効でした】

https://qiita.com/notakaos/items/b08ba7166bb5b56576a1

screenを使っている方法たち↓

Docker for MacのDisk Imageの場所が変わった - Qiita

jpcodeqa.com

【CakePHP2】「Database connection "Mysql" is missing」が出た

f:id:tarcoizy:20210217140931p:plain

1. 環境

ローカル検証を終えて、いざ本番環境へデプロイ。
オンプレミスなんで、WebサーバもDBも同じお家にinしていきます。
一通り設置できたかな?と、動かしてみた。
ま、そう簡単に動くはずないわね。

MariaDBのロゴ、初めて見たw


CMS: CakePHP2
PHP: 7.4
DB: MariaDB
OS: Linux ( Debian10 )

app/tmp/logs/error.logにこんなエラーが出ている。

2021-02-17 08:58:53 Error: [MissingConnectionException] Database connection "Mysql" is missing, or could not be created.
Exception Attributes: array (
  'class' => 'Mysql',
  'message' => 'Selected driver is not enabled',
  'enabled' => false,
)
Request URL: /mysystem/users/login
Stack Trace:
#0 /var/www/html/mysystem/lib/Cake/Model/ConnectionManager.php(105): DboSource->__construct()
#1 /var/www/html/mysystem/lib/Cake/Model/Model.php(3659): ConnectionManager::getDataSource()
#2 /var/www/html/mysystem/lib/Cake/Model/Model.php(1162): Model->setDataSource()
#3 /var/www/html/mysystem/lib/Cake/Model/Model.php(3686): Model->setSource()
#4 /var/www/html/mysystem/lib/Cake/Model/Model.php(1394): Model->getDataSource()
#5 /var/www/html/mysystem/lib/Cake/Model/Model.php(1490): Model->schema()

<..略>



2. PHPinfoでも見てみる

ドキュメントルートにphpinfo() を出力させて確認。 どうやらPDOというDBのドライバをインストールし忘れている模様。

f:id:tarcoizy:20210217135357p:plain

3. PDOをインストール

下記コマンドにて、pdo入れました。

$ sudo apt install -y php7.4-pdo

4. 無事動作できましたf:id:tarcoizy:20210217140310p:plain

これでmysqlのドライバが入った状態。MariaDBMySQLのドライバでいんですね。動いてよかった、ほ。

【Github】プルリクのFileChangedでインデントの違いを無視したい!

1. 結論

URLに?w=1 を付加してアクセス

https://github.com/tarcoiz/xxxx/pull/123/files → https://github.com/tarcoiz/xxxx/pull/123/files?w=1

これ便利!!

2. どんなときに使うの?

Githubでプルリク作って、レビューワーの方にチェックお願いしまーす!ってなときに。 インデント下げただけのところがDiffにわんさか上がってきちゃって困るなーって場合に。

      <div class="box-body">
          <table class="table data-table">
            <tr>
              <th>title1</th>
              <th>title2</th>
              <th>title3</th>
            </tr>
            <tbody>
               <tr class="bg-danger">
                   <td>a</td>
                   <td>b</td>
                   <td>c</td>
               </tr>
            </tbody>
          </table>
      </div>

こんなソースがあったとして、あ!theadタグ入れ忘れてたわ。入れよーっとってなると…

      <div class="box-body">
          <table class="table data-table">
            <thead>
                <tr>  <!-- インデントが変わってるから -->
                  <th>title1</th>    <!-- ここも -->
                  <th>title2</th>   <!-- ここも -->
                  <th>title3</th>   <!-- 差分に出ちゃう -->
                </tr>                      <!-- これもね -->
            </thead>
            <tbody>
               <tr class="bg-danger">
                   <td>a</td>
                   <td>b</td>
                   <td>c</td>
               </tr>
            </tbody>
          </table>
      </div>

そんなとき、w=1のオプションをつけてアクセスすると、スペースやインデントを無視してくれます。 スッキリ。

参考にさせていただきました。 Githubのdiffで空白やスペースを無視する(ブックマークレット付き) - Qiita

在宅ワーク歴10年のかあちゃんが実践するメンタルヘルス5選

f:id:tarcoizy:20210118142921j:plain

かれこれ10年以上在宅ワーカー

子どもが生まれて、待機児童多い地域だったんで、保育園は諦めて…と思っていたので、いやおうなしに在宅ワーカーに。パソコンとネットさえあれば、なんとか仕事できなくはないもんで。というわけで、もう10年以上。 どんな仕事でもストレスって溜まると思うんですが、エンジニアは特にメンタルヘルスを壊す人が多いような気がしていますwww 仕事のレスポンスにも、アウトプットの質にも大きく影響するメンタルですが、これまで実践してきた効果的なメンタルヘルス方法を5つ選んでみました。

 

外に出なくても毎日化粧する

家で仕事するってことで、ONとOFFの境目がなくなってきます。すぐにパソコン開けるし、Slackの返信もしないと気になる…。そしてどんどん、24時間体制で仕事をしているような気分になって、疲れがたまります。 あえて、外に出なくても、仕事モードとおうちモードの区切りをつけるため「おまじない」として、私の場合は「化粧をする」が有効でした。男性だとスーツを着るとか、髭を剃るとか?なんでもいいので、仕事用の身だしなみに整える、というのはした方がいいです。お仕事終わったら、化粧も落として、頭はOFFモードに切り替えします!

集中タイムはチャットもしない

今まで出社ワークで、オンラインワークになれていないチームがやりがちなのが、やたら報告回数が多いとか。ずっと映像流して監視するっていうやり方。こんな働き方って、まず成果上がらないと思うんです。職種によるかもしれないんですが。コーディングしてて、頭の中でロジック組んでいるときに、チャットメッセージ読まないといけないってなると、一旦脳内メモリからロジックを出して、また読み込むので、すっごい時間のロスになってしまう。私の脳内は結局シングルタスクでしかものを考えられないので(マルチでできる人はよいんですけど)、集中タイムを作ることが効果的。しっかり集中してアウトプットできたときは、ほんと清々しく、仕事終わった後の1杯がたまらんのです。 なので、現場が許せば…ですが、予め集中タイムがあった方が結果が出せるのでと、お客様にお伝えして、その間はレスポンスできない旨了承得るようにするとよいと思います。

チームがフラットに話せる時間を作る

対面でお仕事する現場と違い、オンラインだけだとチーム同士でのトークは議題やテーマが必要になると思われがち。するとわざわざチャットで発信しないから、横のつながりが希薄になって、在宅ワークは孤独感が倍増。ゆるっと日常会話ができるタイミング、実はメンタルヘルスにとって重要みたいです。 というのもコロナ禍の影響もあって、最近フリーランスチームでオンライン忘年会をやってみたんです。集まれないんで。各々、ネットで同じケータリングできるオードブルを注文。好きなアルコールを片手に、フリートーク。連帯感UPできたし、普段わざわざチャットで書き込まないかなということも、気楽に話ができて、その後の連携もスムーズになった気がします。これ忘年会・新年会とかじゃなくって、もっと気軽に取り入れると良さそう。

歩く時間を作る

ココロと身体って連動してると私は思っています。例えば、腰痛や肩こりで身体が壊れてくると、ココロだって病んできます。いつもは気にならないチャットでのやりとりでも、相手の言葉にトゲを感じたり。勝手に行間に悪意を感じたり。受け取り手のステータスが、自体を悪化させることはよくある。そしてSlackのグループトークがギスギスしたムードになったりする。 で、効果的なのが一回外に出て歩くことです。単純なんですけど、リフレッシュできて、集中力が増します。週4日でって言ったのに、5日フルで稼働しても終わらないじゃんっていう仕事爆弾が降ってきても、歩く時間は取った方がいい。とにかくボリュームある仕事で効率上げなきゃって、ずっとデスクに向かってると、ミスが増えて、結局遠回りになる。 なので、ちょっとコンビニとか、細かい用事とかなくても!歩く。 おすすめです。

おうちリフレッシュはヨガ

もう一つカラダメンテナンスではあるんですが、おすすめなのがヨガ。 デスクワーカーだからか、結構お腹にガスが溜まりやすくって。膨満感というんでしょうか、仕事中、かなりストレスです。 これが、ヨガでかなり改善されました。やった日とやらない日はあきらかにお腹の感じが違う。ヨガのいいところは、振動するような動きがない。階下の住人から文句言われず家でてきます。ヨガアプリも最近はいろいろ出てて月額2,000円とかでオンラインレッスンもあるし、YouTubeでも動画出てます。揃える道具はたった2つ。ヨガマットとウェアだけ。カーペットや畳だと、滑って動きづらいです。ウェアはピッタリしたものがおすすめ。動きやすいし、ピッタリしているので、お腹のぽっこりがいやでも自覚できるのと、足のむくみなどあればコンディションが把握できること。どちらも気軽に入手できる価格なので、はじめやすいなーと思います。

なんとなく使ってたpackage.jsonについて調べた

f:id:tarcoizy:20210115144007p:plain

1. 開発環境

個人商店のお客様に、小さな売上管理アプリを提供するってことになりまして。
下記環境でコツコツ開発を続けています。じっくり作ってるうちに、どんどんフロントエンド技術が進化しちゃって使ってるフレームワークが古びてゆき困る。早くリリースせねば。

backend: CakePHP ver. 2.10.19 (.lib/Cake/VERSION.txtで確認)
front: CakePHPの標準view (*.ctp の拡張子) + jQuery + vue.js
server: ローカルでの確認はとりあえずdocker上

せっかくお勉強しているvueを使いたいんで、伝統的javascriptへ、部分的にvue.jsを組み込むことにしました。これ直請けだからこその自由度!身になるサイズの開発バンザイ!


2. とっちらかるjavascriptファイル群

1viewに対して、そのページで使うjsファイルを小分けにしておりました。java開発の名残ですね。そうなるとファイル数は増えるわ、ライブラリだって色々入れて、管理が難しくなったのでございます。
そこで、パッケージ管理にnpm というツールを使うのだそうですね、最近は。他のプロジェクトに保守参加した際、package.jsonファイルをお見かけしていたなというぼんやり認識で。まるっと単独の開発では、お偉方の生成物にあやかることはできませんし、どなた様かに責任をなすりつけることもできませんゆえ、しっかり理解する必要が出てきました。いや、ほんとは、保守の歯車になるときだって、きちっと用法・用量は守ってつかうべきなんですけどね。反省。

というわけで。


3. package.jsonの生成

パイセン方々のサイトを拝見いたしまして。そちらによると、プロジェクト直下でコマンドを入力すると生成されるファイルなのだそうです。

$ npm init

このコマンド投入いたしますと、いんたらくちぶに丁寧な質問をいただけます。

# ...(略)
Press ^C at any time to quit.
package name: (package_name)
version: (1.0.0)

# ...(略) 

パッケージのお名前はなににいたしましょうか?
バージョンは何にいたしましょうか?

親切ですね。
答えていくとpackage.jsonの出来上がりです。


4. 生成されたもの

npm initでできたpackage.json のファイルの中身です。

{
  "name": "package-name",
  "version": "1.0.0",
  "description": "my small project for shop",
  "main": "vue.config.js",
  "directories": {
    "lib": "lib"
  },
  "dependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^8.2.2",
    "babel-preset-es2015": "^6.24.1",
    "webpack": "^5.13.0"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/xxxx/package-name.git"
  },
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/xxxx/package-name/issues"
  },
  "homepage": "https://github.com/xxxx/package-name#readme"
}

パッケージ管理の目録というところでしょうか。

5. dependencies と devDependencies

重要なのは、この2項目かと!
dependencies は、このパッケージが依存する別のパッケージを記述してあります。バージョンを指定できます。package.jsonは手動で編集もできるんですが、dependenciesに依存パッケージを追加するにはnpm経由で行います。 npm install でインストールすると、package.jsonが更新され、パッケージ名が追加されます。
なので削除するときは、uninstallします。

devDependencies は、開発やテストのときにのみ必要なパッケージです。

かつては、jQueryのライブラリ(datepickerとかさ)はコピペしてサーバに設置して使っていたものですが、チームできちんと共有できてなかったり。環境合わせるのに苦労していた時代もありました。
この管理ファイルを揃えておけば、みんな同じ環境が整うわけですね。便利になったものだ。

6. script

コマンドのエイリアスで、ここに記載されたscriptはnpm run で実行することができます。
例えば、

{
  "name": "package-name",
  "version": "1.0.0",
  "description": "my small project for shop",
  "main": "vue.config.js",
  "scripts": {
    "dev": "nuxt-ts",
    "build": "nuxt-ts build",  # →これ呼びますよ 
    "lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
    "eslint:format": "eslint --ext .js,.ts,.vue,.jsx,.tsx --ignore-path .gitignore .",
  },
}

こんなふうに書いておくと、

  $ npm run build

でnuxt-ts build が走るというわけです。

今日はここまで。
次回は、jQuery系のライブラリをpackage.jsonの管理に切り替える、というのをやってみたいと思います。

db:migrateのエラー

0. 現象

Ruby on rails のプロジェクトで、dbをマイグレーションかけようと思ったら、下記エラーに遭遇。

$  bundle exec rails db:migrate                  
Could not find ffi-1.11.1 in any of the sources
Run `bundle install` to install missing gems.

1. 解決方法

Xcodeのツールをインストールをする。

$  xcode-select --install                 

すると、何やらXcodeのアイコンと利用規約的なポップアップが出るので同意してインストール。 完了してから、

$  gem install ffi -v '1.11.1' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
Successfully installed ffi-1.11.1
Parsing documentation for ffi-1.11.1
Installing ri documentation for ffi-1.11.1
Done installing documentation for ffi after 7 seconds
1 gem installed
               

で、bundle installしてから、bundle exec rails db:migrateも無事成功となりました。 こちらを参考にさせていただきました[感謝!]:

【解決方法】Macで gem ffi の インストール (アップデート) に 失敗する - Qiita

2. 解決方法までの道のり(1)

bundle install なさいませ、のご啓示に従いコマンド打つとさらにエラー。OMG!

$  bundle install
<略>
current directory: /Users/user/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/ffi-1.11.1/ext/ffi_c
/Users/user/.rbenv/versions/2.6.6/bin/ruby -I /Users/user/.rbenv/versions/2.6.6/lib/ruby/2.6.0 -r ./siteconf20210115-42536-3mapdz.rb extconf.rb
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

<略>
An error occurred while installing ffi (1.11.1), and Bundler cannot continue.
Make sure that `gem install ffi -v '1.11.1' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  bootstrap-sass was resolved to 3.4.1, which depends on
    sassc was resolved to 2.0.1, which depends on
      ffi

ん?でもよく見ると、さらなるご啓示が!

3. 解決方法までの道のり(2)

でも、やっぱりエラーに。

$  gem install ffi -v '1.11.1' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
ERROR:  Error installing ffi:
        ERROR: Failed to build gem native extension.

    current directory: /Users/user/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/ffi-1.11.1/ext/ffi_c
/Users/user/.rbenv/versions/2.6.6/bin/ruby -I /Users/user/.rbenv/versions/2.6.6/lib/ruby/2.6.0 -r ./siteconf20210115-42600-1m980hy.rb extconf.rb
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

4. 解決方法までの道のり(3)

切り口を変えて、エラーメッセージを細切れにしてグーグル先生に聞くと。

「gem install ffi error error: invalid active developer path」 →参考サイトの通りで、解決となりましたとさ。めでたし。

2021新年ごあいさつ

1. 去年まとめ

去年はコロナ影響でお仕事なくなって、前半は生きた心地しなかった。んで、仕方なしマッチング会社経由で紹介してもらった案件でなんとか救われたのですが、まぁーそれはそれは漆黒な働き方の後半だった。フリーランスに案件紹介してくれるマッチング会社さん、週4でって契約なのに、全然終らないボリュームが降ってくる。継続してもらいたいから頑張ってこなすんですけど、家庭崩壊の危機に瀕しました。
ご飯作れないし、洗濯物は消化できないし、子供と会話もない。それでもなんとか、家も回さないとって、つくりおきサービスを使うとか。高齢の義母に洗濯を押し付けたり。申し訳ないなぁと気持ちがすり減りました。そんなこと続けていると、slack の通知で動機までするようになり、流石にこんな働き方してたら心も身体ももたないなぁとしみじみ思った頃、サービスリリースにて契約終了〜。
心折れそうになりつつ、最後まで丁寧に対応できたので(したつもり)、すっごくやりきった感。特にvuetify, typescript とか、鍛えたいと思ってたフロントエンド強化はできてヨカッタ!

2.新年はゆっくり

ってことで、しばらくはお仕事量をぐいっと減らして。セルフメンテナンスと、家庭の立て直し。外はコロナ嵐が吹き荒れているので、こもるのも致し方なしです。
子どもたちのメンテナンス(歯医者とか)、会話をする、ご飯を一緒に食べることもできてなかったなーと思い知りました。丁寧な暮らし大事。

3.抱負

今年はフリーランスチームの受託を増やしたいな。マッチングでもらう仕事って単価はよいのですが、どうしてもドライで無機質な関係はギスギスする。どんな仕事をするか?より、誰と仕事をするか?が、成果を大きく左右するなぁと、身にしみて思ったので。尊敬し合える仲間と、和気あいあいにクリエイティブしていきたい。

そんなこと思ってた矢先、知り合いからお仕事の相談。SEの案件じゃなかったけど、フリーランスチームのデザイナーさんにご紹介できた。
なんか幸先いいなー!がんばろ。

4.夢的なやつ

運良く、好きなことを己の生業にすることができました。間違いなく懐の広い、たくさんの人にお世話してもらって今に至っているわけで。どこかに恩返しをしていなーって。このギフトのバトンを次世代に…とか思って、学生支援のようなことに携わりたいなと。
というのも、私、学生時代は住・食にも困るような強烈に貧困だったことがあって。就職氷河期時代にちょうど社会にリリースされた年代です。学業を諦めてフリーターになったんですが、後悔とか、あの頃もう少し学業頑張れたらよかったなと悔しさが心のしこりになっています。
もしかしたら、未来を作る若い子たちが、その時の私のように苦しんでいるとしたら、どうにか役に立てることがしたい!と思っています。どんなことできるのかわからないですが、小さなことから取り組んでいこう。

こんなこと考えたのもコロナの影響かなぁ。もしもの時がより身近にリアルになったから。
うう、新年早々、緊急事態宣言って、また激動の1年なのかな。
慣れてきたけどww