Angularアプリにバーコードを表示する ~package選定編~
先日次のような記事を書きました。 ngmt83.hatenablog.com
今度はQRではなく1次元バーコードの表示をすることになりました。やりたいことはシンプルですが「Angular + barcode」という情報があまり揃っていなかったため、技術選定に少しだけ苦労しました。
方針
ある値(文字列)をバーコードで表示するというのは汎用的な機能であるため、スタンダードとなるpackageがあるはずだと考え、それを探して採用する方針でした。
要件
- Angularアプリに組み込める
- code128規格のバーコードが表示できる
- いずれ他の規格のバーコードを表示したくなる可能性がある
- svg形式で表示できるとなお良い
調査
Angular, barcode, generator, javascript
といったワードで検索しました。コツはQRやreaderをうまく除外することです。特にQRコードリーダーの情報が多く、私にとってはノイズでした・・・
候補
早速調査をして候補を3つ上げました。
それぞれ比較・検討していきます。
ngx-barcode - npm
github.com Angularから使用しやすくしたpackageです。ドキュメントは充実しているわけではありませんが、簡単に使えそうです。
不安なのは2年前から更新されていないことです。
angular-barcode - npm
github.com 同じくAngularから使用しやすくしたpackageです。ドキュメントは充実しているわけではありませんが、使用例にオプション設定まで細かく書いてあったので使い方はすぐわかりました。
こちらも2年前から更新されていないことが不安要素です。
jsbarcode - npm
github.com Angularを想定しているものではなく、環境を選ばないシンプルなpackageのようです。1年以内に更新があります。
barcode関連の最大手packageと言えるほどの人気です。*1*2ユーザが非常に多く、ドキュメントも充実しています。デモまであって至れり尽せりです。*3
決定
3つを比較していたのですが、そもそもngx-barcode, angular-barcodeはJsBarcodeに依存*4*5しており、JsBarcodeをAngularから使いやすいようにラップしたpackageのようでした。
とすると実現できることはどれもJsBarcode以下で、使い方やオプションを調べるときは結局JsBarcodeを参照することになりそうです。
また、ラップした2つは更新頻度が低いです。バーコードの規格はそう変わらないという点では更新がないのも自然ではあります。しかし更新頻度の高いAngularとの組み合わせを考えると不安です。
以上よりJsBarcodeを利用することに決定しました。
予告
AngularアプリにおいてJsBarcodeを用いたバーコード表示方法を投稿する予定です。
*1:GitHub topic barcodeにおいてstar数4位 https://github.com/topics/barcode
*2:GitHub topic barcode-generatorにおいてstar数2位 https://github.com/topics/barcode-generator
*3:https://codepen.io/lindell/pen/eZKBdO
RSpecでテストを書くときの参考資料神7
RSpecをどう書くかは著名な方々が既に語り尽くしている印象です。そのため非常に参考となる7つの資料、通称神7*1の紹介をします。
私はこれまでレビュやエンジニアインターンに教える際に何度となく神7のお世話になりました。そん経験を踏まえてどの資料にどのようなことが記述されているか、どんな人が読むべきかを併記します。
神7
- Read Everyday Rails - RSpecによるRailsテスト入門
- RSpecえかきうた
- 使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 - Qiita
- Better Specs { rspec guidelines with ruby }
- GitHub - willnet/rspec-style-guide: 可読性の高いテストコードを書くためのお作法集
- Clean Test Code Revised - Speaker Deck
- RSpecしぐさ
神7はざっくり次の3つのタイプに分けることができます。
- RSpecやテストについて全体感を掴めるもの
- 特有の記法や書き方を扱うもの
- より良く書くための戦略や概念の理解に役立つもの
RSpecやテストについて全体感を掴めるもの
RSpec入門者どころか、テスト入門者は学ぶことが非常に多いです。そのため、情報がまとまっている資料をおすすめします。全体感を掴んでから細部の理解に努めると捗ります。
Read Everyday Rails - RSpecによるRailsテスト入門
特徴
この資料を読んだほうがいい人
順序立てて、体系的に学びたい人、ソフトウェアのテスト・RSpecに関してそもそも未経験の人。
本の内容量に圧倒されたり、心が折れないようにだけ注意が必要です。*3この本を最後まで理解できれば、非常にレベルが高い人になれます。いきなりそのレベルに到達しようとせず、必要と余裕に合わせて読み進めましょう。
RSpecえかきうた
特徴
- RSpecでテストコードを0から書き上げる流れを説明している
- テストコードがどんなパーツで構成されているか、それをどう設計するか概要を掴みやすい
- さっと読み、参考にしやすい文量
この資料を読んだほうがいい人
新しくテストを書くぞとなった時にどこから手をつけたら良いかわからない人。describe・context・itの意味するところ、それらの並べ方が良くわからない人。
RSpecの書き順を紹介する記事です。1例なので異なる書き順の人もいるかもしれませんが、お手本として真似するのにおすすめな王道の書き順だと考えていいです。自分のポリシー・書き方が定まっていない人は真似してみましょう。
特有の記法や書き方を扱うもの
使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 - Qiita
特徴
- Qiitaにて無料で入門記事として適度なボリュームで分けて公開されている
- 前述のEveryday Rails(略)の日本語訳者(jnchito - Qiita)が書いているため、文章として非常にわかりやすい
この資料を読んだほうがいい人
テストに関しては知っているが、RSpecの書き方はほぼ知らない人。Everyday Rails(略)を買うか悩んでいる人。
RSpecのシンプルな記法から、実務で書く際に役立つTipsやリンクなども親切に挿入されています。「この人の文章読みやすいな!」と感じたらぜひ前述のEveryday Rails(略)を購入しましょう。
Better Specs { rspec guidelines with ruby }
特徴
この資料を読んだほうがいい人
RSpecの書き方はほぼ知らない人。レビュで小さめの指摘が多い人。「この書き方ならMiniTestでよくない?」「RSpecらしく書いて欲しい」と言われる人。
多言語に翻訳されたページがあるので、留学生インターンなど日本語ネイティブではない駆け出しのエンジニアにもおすすめしやすいです。
GitHub - willnet/rspec-style-guide: 可読性の高いテストコードを書くためのお作法集
特徴
この資料を読んだほうがいい人
RSpecの書き方はほぼ知らない人。レビュで「RSpecらしく書いて欲しい」と言われる人。読みにくいテストコードに悩んでいる人。
良くない例・それが何故良くないか・どう書けば改善されるかがそれぞれのトピックで説明されているため、強い納得感が得られます。レビュア側としても指摘をする際にこのページのリンクを渡すと説明がしやすいです。各現場毎にRSpecの書き方はあると思いますが、このガイドをベースにするといいと思います。
Clean Test Code Revised - Speaker Deck
特徴
- 読みやすいテストコードのための決定版となるスライド
- 可読性を下げるものとそれを排除するプラクティスと具体例が示される
この資料を読んだほうがいい人
読みにくいテストコードに悩んでいる人。動くだけのテストコードから読みやすいテストコードへと次の段階を目指す人。細部のよい書き方はわかるが、全体の理想を掴みきれていない人。
なんで読みにくいんだろうに対する回答となる資料です。こちらの記事を合わせて閲覧するとより深い理解を得られるでしょう。
RSpecしぐさ
特徴
- BDD・TDDを踏まえたRSpecとは何かを知ることができる
- spec等の語彙について深く理解できる
この資料を読んだほうがいい人
MiniTestととの違いが気になっている人。Specをテストという意味だと思ってる人。自然言語としてテスト仕様書としても読みやすいRSpecを書きたい人。
RSpecに関連することを概念的な部分から説明している資料です。この資料を読めば、テストを設計を意味をより大切に感じられると思います。
最後に
他にもおすすめな資料があればぜひ教えてください。
Full Cycle Developer ~ さういうエンジニアに私はなりたい~
先日このツイートを目にしました。
しかし、Full Cycle Developerってすごく良い言い換えだよなあ。Full-Stackだと持ってるスキルにフォーカスがある感じだけど、Full Cycle だと「一連の開発サイクルに責任を持ちますよ(そのために広範なスキルを身につけてるよ)」という感じで、アウトプットにフォーカスが当たってる感じがする。
— (やさいち|yasaichi) (@_yasaichi) 2019年5月8日
このツイートは私がフルスタックエンジニア(という呼び方)に対して抱いていた小さな違和感に答えを出してくれました。 そして私はFull Cycle Developerにこそなりたいのではないか?と思ったので改めて調べてみました。
Full Cycle Developer とは?
「設計・開発・テスト・リリース・運用・サポートというソフトウェアのライフサイクル全体を担うエンジニア」
のことです。
出典
出典はこの記事のようです。英語ですがわかりやすく説明されていたので興味がある人はぜひ読んでください。 medium.com
参考情報
日本語の情報としてはajitofmで言及されていました。有名な企業の取り組みと合わせて語られていて、とても理解しやすかったです。 ajito.fm 特にFull Cycle Developerについては28分ごろから語られます。
冒頭で引用した (やさいち|yasaichi) (@_yasaichi) | Twitter さんのツイートも参考になります。
そうなると、このいわゆるFull Cycle Developersの役割は「いかに仮説検証のサイクルを速く回すか」ということになり、サイクルを速く回せたり(実装力)ボトルネックを取り除く力(問題設定、解決力)が彼らの専門性ということになるんだけど、これは一部の方には受け入れるのが難しいかもなと思う。 https://t.co/RNqkSr3zFw
— (やさいち|yasaichi) (@_yasaichi) 2019年5月8日
Full Cycle Developer の要旨
紹介した資料で十分な理解は得えられますが、私がFull Cycle Developerに関して重要そうだと感じたことを紹介したNetflixの記事とajitofm#37からいくつか抜粋します。
- Full Cycle Developerには各種使いやすいツールの導入が必要
- ツールやプラクティスのセットを提供・支援する横断的な組織があるとより良い
- Full Cycle Developerは全てのライフサイクルにエンジニアリングを適用し、自動化などシステム中心のアプローチによってスケールさせる
- Full Cycle Developerが生まれた背景にはマネージドサービスの充実や学習環境が整ってきたことがある
- 近年のエンジニアはFull Cycle DeveloperとSpecialistに二極化している
- それぞれ向き不向きや好みがあり、Full Cycle Developerのみで良いわけではない
所感
私はこれまでなんとなくフルスタックエンジニアになりたいだとか、CTOを依頼された時に自信を持ってYESと言えるエンジニアになりたい*1とぼんやり考えていました。また、特定の領域に尖ったものを持てず、器用貧乏なだけではないかと悩むこともありました。 しかし、今回Full Cycle Developerという定義づけ・呼び方を知り、自分の目指す姿の輪郭を捉えることができた気がします。
私はユーザの声を聞きたいし、サービスのドメインを理解して優先順位付けをしたいし、データから改善の糸口を探りたいし、設計をしたいし、実装したい。 欲張って、多くのスペシャリストに頼って、全体最適にあらゆるアプローチに取り組んでいきたいです。
*1:CTOに必要な能力を兼ね備えたいだけで、CTOをやりたいわけではない
「DB設計したいNight #4 そーだいさんと失敗から学びながらDB設計したいnight」参加レポート
dbnight.connpass.com に参加してきたのでそのレポートです。Togetterでいいんじゃないかと思うくらい、Tweetの引用がメインになってます。
概要
迷えるDB設計初心者達のための勉強会です。 普段はハンズオン形式ですが、今回は そーだいさん と nakunaruさんのパネルディスカッション形式です。
イベントページより
具体的なDB設計の悩みに対して、そーだいさんや主催チームが語るパネルディスカッション形式でしたが、問いかけをして参加者に考える時間を与えたり、時折参加者にアンケートや質問を取ったりとその場に合わせた・その場にいるからこそ享受できる学びがある勉強会でした。
スポンサー様
会場提供のPIXTA様、綺麗なオフィスのおかげで勉強会が捗りました!ありがとうございます。
フード・ドリンク等の費用サポートのForkwell様、懇親会でも有意義な議論ができました、会話も弾みました。ありがとうございます。
#また出たなForkwell#また来てねSony#dbsekkeinight
— そーだい@初代ALF (@soudai1025) 2019年5月16日
具体的な学び Twitterより抜粋
銀行システムにおける支店の扱いに関する問いについてです。 格納するデータの形式を工夫することで想定外の事態に対応するのも可能だけど、そんなときこそ基本が重要という刺さる言葉をいただきました。やるべきだったこと
— papageno (@pa_pa_geno) 2019年5月16日
「対応するマスタを新規定義するのがよかったのでは」
教訓としては「DB設計に限らず、予想外の事態でちょっとしたテクニックで逃げたくなるときはよくあるけど、そういう時こそ基本を大事にするべき」
#DBSekkeiNight
>アプリケーションのクラスとテーブルをイコールにする先入観があると辛くなりがち。親テーブル子テーブルをつくる。VIEWを使るなどいいかも。Posgreは継承がある
— ナガモト (@ngmt83) 2019年5月16日
Railsでよくやってしまうやつ!#dbsekkeinight
「賃貸物件と売買物件を扱う事例。多くの項目が共通だが一部が異なるので、STIで 1テーブルに詰め込んだ。
— n.siena (@n_siena) 2019年5月16日
特にウェブ系とかでやりがち。データの構造はプログラム上の親子関係である必要はない。例えば、ビューで文脈ごとのスキーマで見せるとか。物件・鎮咳・売買に分割してもいい。
#DBSekkeiNight
不動産に関して賃貸と分譲などをどう設計するかという問いについてです。 STIでどうにかしてしまいがちだけど正規形では当然ないし、想定外に対応しにくいし、分割しておきたいですね。「他に、クラスを観点や部品ごとに分割して、それに対応してテーブルも分割してもよい。
— n.siena (@n_siena) 2019年5月16日
.oO(個人的にはこれは好みなのだけど、必ず「じょいんがー」と騒ぎ出す人が出てくる -_-;
#DBSekkeiNight
>VIEWのVIEWはダメ!
— ナガモト (@ngmt83) 2019年5月16日
>フィクション()だけど、マテビューからマテビュー作っちゃダメ#dbsekkeinight
あまりVIEWを使っていないので踏んだことはないですが、VIEWでVIEWを作ることは地雷だとしっかり覚えておきます。>VIEWでVIEW作ると古いキャッシュが残り、それを順番で解決しようとしたりして辛い#dbsekkeinight
— ナガモト (@ngmt83) 2019年5月16日
1人でDB設計を考えているときに論理設計と物理設計が混ざることはなんども経験があります。またチームでDB設計に関する議論をするときも混同して議論が右往左往したこともありました。注意していきたいです。Q.正規化をどのくらいするか
— ナガモト (@ngmt83) 2019年5月16日
A.100%やりたいなあ
やりきった上で正規形を崩すのはあり。
よくある失敗は論理設計と物理設計は一緒にやってしまうことで起きる。#dbsekkeinight
参加者にVIEWの使用例を聞いた結果です。実際の具体例をあげてもらったおかげで理解が捗りました。Q. VIEWの使い方
— ナガモト (@ngmt83) 2019年5月16日
- データ移行のためにVIEWを一時的に使ったり、SELECTを簡単にするためにのみ使う
- ユーザの状態から次のアクションをレコメンドするのに使っている#DBSekkeiNight
知見の塊ですね。マテビューなどのRDBの機能を飛び道具と呼んでいたのが印象的で「飛び道具に頼ってしまうのは設計が誤っているとき」というのはしっくり来ました。「そーだい氏の場合。実体化ビューや多数の索引を使うのは設計が拙かった場合が多いので再設計を推奨。ビューを使うのは:
— n.siena (@n_siena) 2019年5月16日
1. リファクタリングでの後方互換性のため。
2. セキュリティ上、データアクセスを制限するため。
3. フラグ判定で有効なものだけ結合して取得したりするため。#DBSekkeiNight
「いらないと思ってカラムを消して、後々困ったことある人います?」
— papageno (@pa_pa_geno) 2019年5月16日
↓
(今日の会場では)誰もいない
↓
「じゃあきっと消しても大丈夫ですねw」
#DBSekkeiNight
使わなくなったカラムはビジネス上の都合で消すという確信を持てるまでの調査時間が取れない時を除いて消したほうがいい。 #DBSekkeiNight
— yuyasat (@yuyasat) 2019年5月16日
Oracleだとカラムに「使わなくなった」フラグをシステム的に立てることができる。実際に読みに行かないし、パフォーマンス的にも無いものとして扱える。#DBSekkeiNight
— papageno (@pa_pa_geno) 2019年5月16日
不要そうなカラムなどを削除するときのTips非常によかったです。消したい時はぜひ参考にします。Q「使わなくなったカラムを old_xxx みたいにリネームして残しておくのはどう?
— n.siena (@n_siena) 2019年5月16日
A「コメントに、残しておく期限を残しておく等すると、削除する決断をしやすくなる。
.oO(なるほど。十分に影響がないことが確認できたら削除する派だけど、これはいいプラクティスだなー。採用したい。
#DBSekkeiNight
所感・雑感
シンプルにそーだいさんすげえ!と感じました。tweetにも現れています。
DB設計のパターンというか実現するための手札というか想定する力というか、ポスグレチョットデキルさんすごすぎでは#dbsekkeinight
— ナガモト (@ngmt83) 2019年5月16日
ある概念・使用パターンを説明したいときに、すぐ適切な具体例でるのはんぱないな!
— ナガモト (@ngmt83) 2019年5月16日
経験のかたまりや!#dbsekkeinight
また、ディスカッションや懇親会で時折「これはx章にも書いてあることなのですが〜」「私はx章が好きなんですが〜」という声も聞こえてきたので、そーだい本を読んだらDB設計についてさらに理解が深まるだろうし、有意義な議論ができそうだと思いました。(読んでないと伝わらない話ばかりをされるわけではないです)
ということで買いました。頑張って読みます。*1著者が好きな章は16章らしいです。
最後に
こっちもいい勉強会の予感がしますね! dbnight.connpass.com
*1:現実と向き合う、向き合った話を書いたしんどい本だと懇親会で聞きました。酒の肴にはならないそうです笑
「MySQLがこわれた」ときに諦めてクリーンインストールする方法
先日開発端末にインストールしていたMySQLが起動しなくなりました。
(実際には壊れた原因に心当たりはあり、簡単に元に戻すのが難しいということがわかっていました)
対応として今回はMySQLをクリーンインストールする方針をとりました。何をどうやって入れ直すのかまとめておきます。
※クリーンインストールは最終手段です。先に元に戻せないかやってみましょう。 ngmt83.hatenablog.com
やりたいこと
MySQLはRailsでのアプリ開発に使用しており、Railsから接続できる必要があるため含めています。 また、複数バージョンのMySQLを用いる予定はありません。*1
環境
- OS: macOS Mojave ver 10.14.4
- shell: fish, version 3.0.2
- パッケージマネージャ: Homebrew
- MySQL: MySQL@5.7
- DB管理アプリ: Sequel Pro
- Rails: Rails 5.2.0
開発端末localのMySQLを完全にアンインストール
まずはインストールされているMySQLを確認しましょう。
brew list | grep mysql
これでbrewでインストールしてあるMySQLが確認できます。単にmysql以外にもmysql@5.7のようにバージョン指定されたものもあります。アンインストールは次のコマンドで実行できます。
brew uninstall [インストールしたいバージョンのmysql]
uninstallしただけではMySQLの実行時の各種データ・ファイルは残ったままです。仕切り直したいので次のコマンドですべて削除しましょう。
rm -rf /usr/local/var/mysql
データベースのバックアップを取りたい場合は削除する前にmysqldump
しましょう。私は忘れていてひどい目にあいました。
ちなみに「なんかそれっぽいものあるやん」とDB情報を保存していそうな /usr/local/var/mysql 以下のフォルダ(データベース名がついている)をコピーしてバックアップとするのはおすすめしません。私はそれでひどい目に(以下略
指定バージョンのMySQLをインストール
次のコマンドでインストールできるものを確認しましょう。
brew search mysql
今回はバージョン5.7を利用したいため、mysql@5.7をインストールします。
brew install mysql@5.7
これでインストール完了です。しかしこれだけではmysqlコマンドで実行はされません。
これについてはインストール中のログで次のような説明されています。(バージョンにより細部は異なる)
mysql@5.7 is keg-only, which means it was not symlinked into /usr/local,
雑に言うと「mysql@5.7はインストールしたものの、通常のコマンドでは呼び出されない」という意味です。
通常のmysqlコマンドで呼び出すためにはシンボリックリンクを貼るか、インストール先にPATHを通す必要があります。 今回はスタンダードな手法としてインストール時に表示される次の指示に従ってPATHを通しましょう。(バージョンや使用するshellにより細部は異なる)
If you need to have mysql@5.7 first in your PATH run: echo 'set -g fish_user_paths "/usr/local/opt/mysql@5.7/bin" $fish_user_paths' >> ~/.config/fish/config.fish
これはshellのconfigにPATHを追加する記述を行うコマンドです。そのまま実行してしまって構いません。*2
configを更新したらそれを反映するために次のコマンドを実行しましょう。(fish shellの場合です)
. ~/.config/fish/config.fish
接続用のユーザ作成
Sequel ProやRailsからMySQLに接続するためのユーザを作成します。
mysql
でmysqlツールを起動し、次のようなコマンドを実行しましょう。
mysql> SET PASSWORD FOR [ユーザ名]@localhost = ‘[パスワード]’
root, rootでもいいですが、アプリからの接続ユーザが設定されている場合はそれに従いましょう。
DB管理アプリ・RailsアプリからMySQLに接続
DB管理アプリはSequel Proを使用します。*3設定は簡単で、スクリーンショットのようにユーザ名とパスワードを入力するだけです。
Railsアプリの場合は config/database.yml にユーザ名とパスワードを記述しましょう。rails db:create
などDB接続が必要なコマンドが実行できれば成功です。
最後に
説明しておいてなんですが、そもそも開発マシンに直接MySQLのようなDBをインストールするのはおすすめできません。 MySQL環境の構築はなかなかにめんどくさいですし、切り出したコンテナに接続するのもさほど難しくないのでぜひdockerを使いましょう。
*1:その場合は大人しくdockerを使いましょう
*2:実行して変更されたconfigを確認したいときはcat ~/.config/fish/config.fish
*3:Mojaveでは不安定なのでDBeaverに乗り換えたい。https://qiita.com/nanasess/items/609c7cda4adee344221c
「何もしていないのにMySQLが壊れた」ときにとりあえずやること
※可愛いTシャツですが本題とはあまり関係ないですなぜか分からないが、
— ekotロボ (@ekot_ROBOT) June 19, 2017
システムエンジニアに好評だ!
ぱちょこん
<イラスト:店長 里一磨> https://t.co/mGkqPfgvtd
minne pic.twitter.com/dE8HHkVm7g
先日開発端末にインストールしていたMySQLが起動しなくなりました。ちょうどいい機会なのでそんなときどうするかをまとめました。 紹介する処置は簡単に行えるもので大して時間もかからないため、原因に心当たりがあろうがなかろうがすべて試してもいいです。
前提
一度は起動する環境をつくっていたが起動しなくなった。
筆者の環境
- OS: macOS Mojave ver 10.14.4
- shell: fish, version 3.0.2
- パッケージマネージャ: Homebrew
基本のエラーログ確認
最初に状況確認のためエラーログをみましょう。
tail -f /usr/local/var/mysql/[端末名].local.err
ログが十分に存在しない場合は、あえて正常に動作しない操作(mysql.server start
など)を行うのもありです。ログの内容によってはすぐに原因を特定することもできます。
よく見るメッセージの例を1つだけあげておきます。
> ERROR! The server quit without updating PID file /usr/local/var/mysql.
ログを見ても原因がわからない場合は後述する方法で1つずつ確認していきましょう。
なぜか生きているMySQLプロセスが存在する場合
すでに起動している(アクセスはできない)ためにMySQLが起動できないということがありえます。次のコマンドでプロセスを探しましょう。
ps aux | grep mysql
意図しないMySQLプロセスが見つかったときはkill
しましょう。
MySQLで使用予定のポートが空いていない場合
ポートが空いていなければMySQLは起動できません。次のコマンドで使用予定ポートの状況を確認しましょう。(MySQLのデフォルトポートは3306です。)
lsof -i :[ポート番号]
停止したはずのMySQLや他のプロセスが使用していた場合は停止(kill
)するか、起動するポートを変えるかしましょう。マイクロサービスなど、ポートを多く利用する人はそこそこの頻度で発生しそうです。
ソケットが残っている場合
特に指定なく使っている場合、MySQL用ソケットは1つしか作成できない(名前が重複する)ため、mysql.sock
やmysql.sock.lock
があると新たにMySQLは起動できません。次のコマンドで確認しましょう。
ls /tmp | grep mysql
意図しないソケットが残っていれば削除(rm
)しましょう。
これは再起動やPCのクラッシュなどでMySQLを正常に停止できなかったことが原因です。これはだれでもたまに発生するでしょう。
mysqlフォルダ内のファイルのownerやパーミッションがおかしい場合
MySQLは/usr/local/var/mysql
内にファイルを作ったり更新したりします。それらのパーミッションが適切に設定されていない場合、MySQLが起動しなかったり特定のタイミングで異常が発生します。パーミッションは次のコマンドで確認できます。
ls -al /usr/local/var/mysql/
私の環境ではデフォルトでownerがユーザ名(私の場合はnagamoto)、groupがadminでした。
基本的にはデフォルト値から変更する必要がないため、これが原因であることは少ないです。しかし、ググって見つけた方法を片っ端から試していると誤って変更してしまうかもしれません。*1chown
やchmod
は慎重に使いたいですし、エラーログにPermission denied
が含まれているときのみパーミッションを疑いましょう。
その他MySQLが壊れる原因
brew upgrade
でMySQLのバージョンをうっかり(または無意識に)上げてしまい、壊れてしまうことが多いようです。
バージョンアップはMySQL単体では動作しても他のシステムと組み合わせた時に不具合が出ることもあるので丁寧に行いましょう。
最後に
Dockerを使ったらこういう悩みは少なくなるので、ぜひ使いましょう!
*1:実際にchownを使用する検索結果はあった
とある田舎のIT活用~壱岐の取り組みや変化〜
ngmt83.hatenablog.com こちらに書いた通り、サイト作成のために地元の調査をしていると、興味深い取り組みや変化に気付きました。*1
最近のものから数年前のものまで田舎も捨てたもんじゃないなと思った取り組みや変化をまとめておきます。
キャッシュレス化が進んでいる
PayPay加盟店が非常に増えていました。
正直PayPayのこと舐めてたわ。
— ナガモト (@ngmt83) April 27, 2019
20km四方の小さな田舎の島(壱岐)にこれだけ加盟店あるのホントすごい。 pic.twitter.com/7uLRQJCLXB
5日間ほど壱岐にいましたが、PayPay加盟店のみで生活することが可能なほどでした。Line Payやメルペイはコンビニでしか使えませんでした。地方も含めた国全体のキャッシュレスをもっとも進めているのはPayPayかもしれません。
壱岐市産業支援センター・Iki-Biz
簡単に説明すると、地域活性化のために地元企業のコンサル・アドバイスを行う組織です。自治体がセンター運営費を負担し、地元企業は無料で相談を受けることが可能です。零細な地元企業がそれぞれコンサルを雇うのは現実的ではないため、非常にありがたい取り組みだと思います。
センター長の募集では地方自治体が年収1200万円の求人を出したと話題になりました。
壱岐市産業支援センター・Iki-Bizセンター長 長崎県壱岐市への転職・求人情報(求人コード:3001492495)
最近はこんなイベントもあったようです。聞きたかった。
青いぜ!長崎BLUEISLANDSPROJECT
まずはこれをみて欲しいです。なかなかに衝撃的な動画です。
壱岐編もあります。
壱岐編には親戚・知り合いが映っていたので福山雅治と会えて羨ましいです。(小並感)
真面目な話をすると、自治体の動画マーケティングでも今時のバズりそうな工夫が取り入れられていて、素直に感心しました。もっとこういった動きを加速させてほしいです。
YouTuberコラボ 島まるごと使ってリアル型脱出ゲームやってみた。
動画紹介文にふるさと納税に関する記載もありますし、ふるさと納税を担当する部署が企画を進めたのでしょう。動画としての面白さがありながら、島の名所・良さを随所に見ることができる素敵な動画でした。市の企画者、おるたなチャンネルの中の人いずれも尊敬です。(何度 も行ったことがあるのにまた辰ノ島に行きたくなりました。)
株式会社LIGさんの取り組み(ゲストハウスなど)
株式会社LIGさんは今時のWEB制作会社ですが、地方創生にもとても力を入れており、注目しています。WEBメディア作成・運用のノウハウを持っているため、LIGさんが関わっているものはHPなど見栄えもよく、壱岐市にとっては心強い存在だと思います。
具体的には、ゲストハウスLAMP 壱岐島、いいオフィス壱岐、ローカル食堂などの取り組みをしています。
ローカル食堂については「東京で壱岐のものが食べられる!」と喜んで参加しました。知っていましたがとても美味しかったです。(夢中で食べている姿が写り込んでしまった)
LIG BLOGには壱岐に関する素敵な記事が多数掲載されているので、ぜひ見てください。
シバヤマさんの取り組み(WEBマーケ)
シバヤマさんは前述のLIGと縁があるようで、協力し合いながら独自の活動もしているようです。まず壱岐市で公務員やっていたのに40手前でフリーになる決断力がすごいです。今はイキテイクという会社として取り組んでおり、様々な取り組みはサイトにまとめてあります。
個人的に次の記事が好きです。
今は壱岐でロボットプログラミング教室を開くべく、クラウドファンディングをしているようです。
壱岐出身のITエンジニアとして力になりたいところではありますが、ロボットに知見を持たず歯痒い思いをしています。とりあえず少額ながら支援させていただきました。
壱岐イルカパーク&リゾート
イルカメインの小規模な屋外水族館くらいの運営をしていたイルカパークがリニューアルされました。まだまだ計画の途中段階のようですが、つい先日のオープンでは、素敵なカフェが併設されているのを確認できました。VERY FANCYというパンケーキで有名なお店が共同のようです。ついに壱岐でもおいしいパンケーキが食べられるようになったのですね!
実際に行ってみたところ、イルカと触れ合うアクティビティが一新されており、ぜひやってみたいと思いました(当日はあいにく雨天のため断念)。カフェは非常にオシャレで快適でした。子供が遊ぶのを見守ったり、アクティビティまでの空き時間を過ごすのにはもってこいです。連休ということで人がたくさんのためパンケーキはいただけませんでしたが、とても美味しそうでした。
最後に
地元贔屓かもしれませんが、なかなか面白い取り組みをしていて少し誇らしい気持ちになりました。私自身もいつか地元に貢献できるようにもっとエンジニアとしての技術力を向上させていきたいです。 壱岐も私も頑張れ!
*1:アドベントカレンダーに全く間に合ってなくて情けない・・・