NAKKA-Kの技術ブログ

技術に関する知見や考え方などを投稿します。

激重ALTER TABLEをpt-online-schema-changeを使ってサービスを止めずに実行するための方法

対象環境 Aurora MySQL pt-online-schema-change 3.2.0 なにも考えずにALTER TABLEを実行するとどうなるか? 既に動いているDBのカラム操作、インデックス操作などをするALTER TABLEクエリを実行すると、書き込みLockが発生してinsertやupdateができなくなり…

ここ2ヶ月で実施したリモート輪読会の手法やtipsについてのまとめ

今の時期、基本的にリモート以外でイベントを開催するのが難しい状況です。 逆にその状況を逆手にとってみんなでリモート輪読会をやりましょう! 私はここ2ヶ月程度で3グループ3冊分のリモート輪読会を実施しました。 それぞれの輪読会によって複数の方法を…

リモートワーク時にビデオ画面とメモ画面の両立が難しい時の解決法(Mac)

今の時期、みなさんリモートワークしている方が多いですよね。 その中でビデオ画面(以下ビデオツール)を最大化して画面共有したりカメラにホワイトボードを映したりしている時にメモを取るのは難しいです。 メモを取るときはウィンドウを切り替える必要があ…

リモート輪読会で 「オブジェクト指向設計実践ガイド」を読んだ時のやり方と感想

このコロナの影響もあったのですが、もともと遠隔でやる予定だったのでZoomを使ってリモート輪読会を実施しました。 今回読んだ本は以下の「オブジェクト指向設計実践ガイド」です。 ですが実はもう1人のメンバーが読んでいたのは最新の原書で、Rubyのバージ…

電動昇降デスクでスタンディング環境とシッティング環境を両立させる健康のための夢の作業環境を作った話

最近引越しをする機会があったので、そのついでに健康に配慮した作業環境を作りました。 これからの時期引っ越す人も多いと思うので、この機会に少しでも健康に配慮した作業環境を作ってみてはいかがでしょうか? 基本的には以下の記事を参考にしましたが、D…

Elastic BeanstalkのMultiContainer環境にRails+Nuxtをデプロイする

Elastic BeanstalkでMultiContainer環境を構築し、RailsとNuxt.jsをデプロイします。 今回の環境 ElasticBeanstalk(Multi-container Docker) Rails 5.2 (ruby:2.6) Nuxt.js 2.11 (node:12-alpine) PostgreSQL (RDS) 目次 今回の環境 目次 初期設定 AWSのアカ…

vuex-persistedstateを使っていると、ストアを変更しても前のデータがlocalStorageに残って困る

VueやNuxtのプロジェクトでよく使われるvuex-persistedstateというストア永続化プラグインがあります。 このプラグインはストアの内容をlocalStorageに永続化してくれるものです。 問題 ストアの内容を永続化し、ページを開いた時ストアに再展開してくれるの…

DockerとNuxtのSSRでConnectionRefusedが発生する問題の原因を解説する

Docker上でAPIサーバーとNuxt(SSR)を動かす環境で、connection refusedが発生したりしなかったりする問題に遭遇しました。 今回はその問題の発生原因について書いていきます。 一言で どういうこと? 前者のパターン 後者のパターン 何が問題? 解決策 まと…

env設定忘れでDBが動かず、Dockerを初期状態から立ち上げた

Dockerでpostgresを起動。 同じくDockerでRailsを起動しdocker-composeで接続。 ActiveRecord::NoDatabaseError FATAL: role "myuser" does not exist docker-compose up -dした時に環境変数をセットするのを忘れていました。 postgresにボリュームを設定し…

独立したGitリポジトリのマージをすると発生するfatal: refusing to merge unrelated historiesの解決

GitHubでリポジトリを作る。 ローカルでリポジトリを作る。 その後、マージしないとと思い立ちgit pull origin masterをすると、fatal: refusing to merge unrelated historiesが表示されてしまいました。 そんな時はということで、git merge --allow-unrela…

GoModuleを使ったgo getができない問題を解決する

$GOPATH以下ではデフォルトでGO111MODULE=ofになるため依存パッケージがインストールされておらず、明示的にGO111MODULE=on go get -uをする必要があった。 参考 Go Modules

Laravel5.7でAPIコントローラーをメソッドとしてテストする方法

LaravelでAPIやコントローラーをテストする方法を調べると、大体出てくるのはサーバーを立ち上げてルーティングに対してリクエストを飛ばしてテストする方法です。 今回はコントローラーのメソッドをそのままテストする方法について記述していきます。 なぜ…

Laravel5.7のServiceコンテナをモック化してする方法

Laravelに限らずですが外部のAPIを通信したり、重い処理を実行しているの部分があるのでテストの時はモックにしたい、といった場面は多々あると思います。 今回はServiceコンテナをモック化する方法をまとめていきます。 Serviceコンテナが使われているコー…

vimのGoの言語補助プラグインでUnknown functionバグが発生した

vimをupgradeさせた時に唐突にvimがエラーを吐き出し始めました。 エラーは吐き出すもののとりあえず動いてはいました。 ですがvim-goのある部分でエラーが発生しているようでした。 Error on startup: Unknown function: go#config#CodeCompletionEnabled …

webアプリケーション開発で個人的に重視しているテストの話

Slackでテストの話について盛り上がったので、webアプリケーション開発で個人的なテスト毎の優先順位などについて書きたいと思います。 早速本題に入りたいと思います。 Controller コントローラーの処理をホワイトボックステストする利点は少なく、ブラック…

Laravel5.7 [API開発]で権限設定をPolicyに任せて幸せになろう

LaravelでAPIを作っていると、例外周りの処理を良い感じにしてくれないので非常に大変です。 Policyをそのまま使っても403ページが返ってしまいますし、エラーメッセージの変更も困難です。 今回は権限判定をPolicyに移植して、かつ任意のエラーメッセージを…

Laravelを使ったAPI開発でController内のバリデーションをFormRequestに抽出して幸せになろう

私の開発しているプロジェクトでは Laravel 5.7 React/Redux を使って開発しています。 バックエンドのLaravelはAPIを実装しています。 LaravelでAPIを実装すると通常のwebで作るより処理が煩雑になる気がします。 その上、いろんな処理をControllerにまとめ…

Raspbianの固定ローカルネットワークアドレスの設定

IPの設定 まず/etc/dhcpcd.confを開きます。 ここで固定IPを設定します。 interface eth0 static ip_address=192.168.10.33/24 static routers=192.168.10.1 static domain_name_servers=192.168.10.1 8.8.8.8 ip_addressは設定したいRaspberryPiのIPアドレ…

Reactのプロジェクトを平成最後の大リファクタリングした話

平成の技術的負債を令和に持ち越したくないからリファクタリングしよう!!と思ったのが事の始まりでした。 短期的に開発速度を求めLintを後回しにしてしまったプロジェクトにLintツールを導入し、Reactのコードを全て綺麗にした時のツールや方法を書きます…

資格を取るべきなのか専門学校生としての経験をもとに考えてみた

最近Twitterでは基本情報やらITパスポートやら資格についての話がよく見受けられます。 資格をかなり重要視している専門学校の、生徒だった経験から資格をとった方が良いのか、取らなくても良いのか、どのような心構えで取るべきなのかを個人的な考えで書い…

「ゼルダの伝説 ブレスオブザワイルド 」のUXについて考察しました

Nintendo Switch版「ゼルダの伝説 ブレスオブザワイルド 」(通称BoW)のUXについて考察してみました。 このゲームには素晴らしい仕組みや面白さなど多くの要素がありますが、今回話す内容はその中でもトップクラスに素晴らしい要素について書きたいと思います…

ロケール環境設定を良い感じに設定する方法

ロケール環境設定の詳細な意味は以下の私の記事を呼んでください。 qiita.com 結論 特にこだわりがないならとりあえずLC_ALLを設定しておけば大丈夫です。 export LC_ALL=ja_JP.UTF-8 ja_JP.UTF-8の部分は自由に変更してください。

プログラマーの学習方法は1つを極めるべきなのか、広く学ぶべきなのか?

プログラマーの学習方法はどうするのが一番良いのでしょうか? ある人は1つに決めてひたすら習熟し、その後に別の技術に手を出すべきだ。と言います。 はたまたある人は1つだけを学んでいても意味がないから、幅広く学ぶべきだ。と言います。 どっちだよ!!…

「HeadFirstデザインパターン」のObserverパターンをGo言語で実装してみた

「HeadFirstデザインパターン」ではJavaを用いてデザインパターンの実装が解説されています。 これらのデザインパターンをGo言語で実験的に設計し直した実装を紹介します。 前回はStrategyパターンを実装しました。 nakka-k.hatenablog.com Observerパターン…

「HeadFirstデザインパターン」のStrategyパターンをGo言語で実装してみた

「HeadFirstデザインパターン」ではJavaを用いてデザインパターンの実装が解説されています。 これらのデザインパターンをGo言語で実験的に設計し直した実装を紹介します。 Strategyパターンとは 簡単な概要だけを説明すると、 複数の振る舞いをインターフェ…

「Go言語でつくるインタプリタ」を読んでインタプリタの身近さをを確認した

「Go言語でつくるインタプリタ」は、そこらへんのネットに転がっている超軽量なRubyで作ったLispインタプリタほど小さくなく、重厚な理論に関する論文や書籍のような難しすぎるものでもなく、インタプリタがどのように動作するのか理解するために十分で適量…

プログラマーがモチベーションを維持するためにやったこと

モチベーションとは自分の意志だけで維持するのは非常に難しいです。 どれだけ外部から効率的にモチベーションを得られるかが鍵となっています。 新生活が始まるこの時期からスタートダッシュを維持できるように、私が実践しているモチベーションアップ方法…

「超一流になるのは才能か努力か?」を読んで己の限界を越えよう

この書は人々が才能と呼ぶ生まれ持った資質と全面から闘い、己の道を切り開くための本だ。 超一流になるのは才能か努力か?作者:エリクソン,アンダース,プール,ロバート発売日: 2016/07/29メディア: 単行本 対象読者 結論 努力すること 目的ある練習、限界的…

ダムを見てオブジェクト指向に思いを馳せた話

先日旅行に行った時、ダムを見てオブジェクト指向に思いを馳せたことをここにまとめてみます。 ダムについて 雨が少ない時に渇水してしまわないようにダムに雨水などを貯めておき、いつでも必要な時に水を確保できるようにする役割を担っています。 その後、…

「テスト駆動開発」を読んでTDDについてまとめた

kent beck 著、和田卓人 訳「テスト駆動開発」を読んだ感想を書く。 TDD(テスト駆動開発)とは 自動化されたテストを書く。 テストが失敗した時のみ新しいコードを書く。 重複を消去する。 テスト駆動開発とはこれらのシンプルな制約のもとになりたつ。 これ…