サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
blog.toshimaru.net
お久しぶりの更新です。ブログをリニューアルしました。 お久しぶりです。 久しぶりのブログ更新です。 ブログのデザインをリニューアルしたいなーと思い立ち、リニューアルを推進するために自分自身にブログのデザインを刷新するまではブログを更新しないぞ、という制約をかけてました。 その過程で TTIL なんていう雑メモ置き場的なサブ・ブログを初めてしまい、本家のこちらの更新をサボっておりました。 が、一念発起してブログをリニューアルしました。 技術スタック ブログの技術スタック…という程大きな技術スタックの変化はないのですが、今回のリニューアルで使った技術を紹介します。 (🆕 が付いているのが今回のリニューアルでの新たな取り組み) Blog Engine: Jekyll Hosting: GitHub Pages 開発中のホスティング: Cloudflare Pages (🆕) CSS: Tai
目次 ベースとなるHashデータHashのKeyをソート HashのKeyを昇順にソートHashのKeyを降順にソートHashのValueをソート HashのValueを昇順にソートHashのValueを降順にソートRubyでHashのKey/Valueをソートするにはどうしたらよいでしょうか。 ベースとなるHashデータ今回ソートの対象となるベースとなるHashデータは下記のとおりです。 > h = { c: -10, z: 10, b: -5, y: 5, a: -1, x: 1 } => {:c=>-10, :z=>10, :b=>-5, :y=>5, :a=>-1, :x=>1}
目次 テーブル構成 Railsモデル定義 has_oneをもったモデルをスキップする モデル定義 inverse_of を設定する モデル定義(inverse_of version) 過去に書いた関連記事 参考 テーブル構成 とあるRailsアプリケーションでこんなテーブル構成があったとします。 Railsモデル定義 Railsモデルは下記のような状態です。 ユーザー(User)は複数の記事(Post)データをもっている ユーザー(User)は1つのプロフィール(Profile)データをもっている class User < ApplicationRecord has_many :posts has_one :profile end class Post < ApplicationRecord belongs_to :user end class Profile < ApplicationR
TimeWithZone#between? で範囲内判定 特定日付が範囲内にあるかの判定を行うには ActiveSupport::TimeWithZone#between? が使える。 # 日時.between?(始端, 終端) Time.now.between?(Date.yesterday, Date.tomorrow) > Time.now.between?(Date.yesterday, Date.tomorrow) => true > Time.now.between?(1.week.ago, Date.yesterday) => false > Time.now.between?(Date.tomorrow, 1.week.since) => false
結論 先に結論だけ書きます。ここだけ押さえておけばOK。 「無償版G Suite終了」という方針が撤回され、継続されることになった まだ無償版からアップグレードしていない方: こちらから申請 既にアップグレード対応してしまってた方: サポートに問い合わせれば :ok: 無償版G Suiteが終わる!? 独自ドメインでメールアドレスを運用する場合、無償版G Suiteが定番でした。 無償版 G Suiteの新規契約は、2012年12月5日をもって終了しており、現在新規契約は停止しています1。 しかし、2022年一月に無償版G Suiteの終了がアナウンスされました。これにより、長らく無償版G Suiteを使用していたユーザーはアカウント移行を余儀なくされるかたちとなりました。 しかし、結論としては無償版G Suiteは継続されることになりました。それに至る経緯をまとめたいと思います。 対応タ
目次 標準入力, 標準出力, 標準エラー出力とは?標準出力, 標準エラー出力するシェルスクリプト Rubyバージョンリダイレクト無し実行時標準出力リダイレクト有り実行時エラー出力リダイレクト有り実行時エラー出力を標準出力としてリダイレクト実行時標準出力&エラー出力を別々にリダイレクト実行時出力をリダイレクトで捨てる参考標準出力、標準エラー出力のリダイレクトの方法を実際のコマンド実行結果とあわせてまとめてみます。 標準入力, 標準出力, 標準エラー出力とは?種類説明ファイルディスクリプタ省略形
目次 ゴール 手順 Dockerfile 初期Gemfile entrypoint.sh docker-compose.yml rails new DBホスト名変更 Error: caching_sha2_password could not be loaded DBコンテナでmysqlクライアント起動 認証方式変更SQL “Yay! You’re on Rails!” 参考 docker-compose を使って Ruby 2.7 + Rails 6.0 + MySQL 8.0 の環境を構築してみたいと思います。 ゴール ゴールはRailsのデフォルトホーム画面を表示させるところまでです。 手順 下記の手順をベースに進めていきます‥ Quickstart: Compose and Rails | Docker Documentation Dockerfile 適当なディレクトリを用意して
2020年にCircleCIの次世代イメージ・cimg が登場しました1。 個人のRuby on Railsプロジェクトで、従来のcircleci/rubyから次世代イメージであるところのcimg/rubyに移行してみたので紹介します。 ベースイメージの変更 circleci/ruby から cimg/ruby へ変更します。 executors: default: working_directory: ~/app docker: + - image: circleci/ruby:2.7-node-browsers - - image: cimg/ruby:2.7-browsers CircleCI 公式 Orb の利用 今回の変更とあわせて、下記2つのCircleCI公式Orbも導入しました。 CircleCI Developer Hub - circleci/ruby CircleCI
目次 TL;DRRubyで数値の0埋めRuboCopのオススメ書き方 Favor format over sprintfFavor format over String#%Prefer annotated tokens結論Rubyで数値の0埋めするときの書き方をよく忘れるのでメモ。 TL;DR結論としては下記のように書くとよい。 format("number: %09<number>d", number: 1) #=> "number: 000000001"
rakeタスクの前に別のrakeタスクを実行ある特定のRakeタスクを実行する前に別のタスクを実行したい場合、このようにタスクを書きます。 task(:x) { puts "x" } task(:y) { puts "y" } task(:z) { puts "z" } desc "dependency rake task" task foo: [:x, :y, :z] do puts "foo task" end
タイトルの通り。 本ブログは Disqus を使ってコメントフォームを設置しています。いや、正確には設置していました。 SNSのプラットフォームが十分に成熟している昨今ですから、そもそもコメント欄を設置すること自体がなんとなく時代遅れになってきているのでは?と感じるのですが、Jekyllを使われている皆さんはDisqusを使ってコメント欄を設置されているようなので、それに倣ってDisqusでコメントフォームを設置。 Jekyllならここまでできる!ブログをJekyllに移行しました しかしながら、試したいDisqus有料機能があり有料プランに一度トライアル申込みするとトライアル終了後に 広告が表示され続けて消せない という事態に見舞われました。 サポートチームに問い合わせたのですが 広告を消す唯一の手段は再度有料プランに切り替えることだ ということらしいです。(今までは無料で広告無しで使え
本記事では、マルチステージビルド構成のDockerfileのビルドの並列実行について紹介したいと思います。 前提 Docker Desktop v3.2.1 Docker v20.10 Docker Compose v1.28 Dockerfile 今回テストで使うマルチステージビルドのサンプルとなるDockerfileは下記です。 FROM alpine as test1 RUN sleep 10.1 # sleep from test1 FROM alpine as test2 RUN sleep 10.2 # sleep from test2 FROM alpine as test3 RUN sleep 10.3 # sleep from test3 FROM alpine RUN echo "build start" RUN sleep 10.0 # sleep from main
PR作者を自動でアサインするGitHub Actions, auto-author-assign を作った 本記事はGitHub Actions Advent Calendar 20206日目の記事です。 今日は作ったGitHub Actions、auto-author-assignの紹介をしたいと思います。 作ったきっかけPull Request(以下、PRと表記)を作成をしたとき、多くの場合そのPRの担当者(Assignee)はそのPR作者自身になるかと思います。 その「PR担当者をPR作者にアサインする」アクションを自動化した、というのが今回作成したGitHub Actionsになります。 何が嬉しいか?たくさんの人がPRを出しまくる、そんな大規模プロジェクトだとPR一覧を開いたときに 「誰がPRの担当者なのか?」がアイコンで一目でわかるようになる(Author に加えて)Assig
リードエンジニアから学ぶMedPeerのプロダクト開発という僕が所属する企業のイベントで、「アラサーエンジニアの生存戦略」というタイトルで発表しました。 発表の経緯もともとの発表の着想となったエントリはこちらになります。 技術者としてスポンジであり続けること あるいは老害回避戦略の話 エンジニアリングとは常に学習し続けることである。 思うに、コードを書かず学習意欲を失ってしまった35歳のおじさんたちが自分がコードが書けないこと・学ばないことの言い訳として言い出し始めたのがこの「35歳定年説」の真実じゃないだろうか。 この文章は僕自身が若手とは言えない年齢となり今後シニアな立場へとなっていく中で「自分は老害化していくのではないか」という危機感から自戒も込めて書いたものである。願わくば五年後十年後自分がここに書いたような老害になっていないことを祈る。 この記事のトピックとしては、「エンジニアの
目次 なぜGitHub Actionなのか?基本のrubocop設定reviewdogによる自動レビューを追加レビューコメント実際に動かしてみたPull Request余談過去にreviewdogを使ってCircleCI上でrubocop自動レビューを動かす記事を書きました。 Blogged. | reviewdogを使ってCI上でRuboCop自動レビューを動かす - Hack Your Design! https://t.co/8vdNUEIisX — toshimaru (@toshimaru_e) November 19, 2018本記事はそれのGitHub Actionsバージョンになります。 なぜGitHub Actionなのか?以前に書いた記事のようにCircleCIでも問題はないものの、GitHub ActionsはデフォルトでPull Requestにコメント可能な GI
Jekyll製英語ブログのGitHub PagesへのデプロイをGitHub Actionsで自動化したのでそのメモ。 今までのデプロイ方式今までどうページソースをGitHub Pagesに自動デプロイしていたかでいうと、Jekyllでgit pushをフックしてGithub Pagesへ自動デプロイするようにしていた。 この方法でも全く問題ないがセットアップがやや面倒。なので英語ブログは手動デプロイ状態のまま放置していた。今はGitHub Actionsを使ったデプロイ方式がナウそうだ、とのことで重い腰を上げてその方式をトライ。 新しいデプロイ方式対応したPull Request: Deploy Automation with GitHub Actions · toshimaru/blog.toshima.ru やっていることとしては至ってシンプル。 masterブランチで変更があった場
本記事は『銀座Rails#21で「Fat Modelの倒し方」を発表しました』の後編になります。 当日あった質問、発表してみての感想などを書きたいと思います。 当日の質問 ファイルの置き場についてtrailblazer について初リモート登壇してみて セットアップ感想Special Thanks当日の質問ファイルの置き場について質問の文脈としては「POROファイルの置き場ってどこ?」という内容でした。 発表中でPOROは「Modelの補助輪」という表現をしましたが、役割としてはModelにあたるので置き場所もapp/models配下で問題ないと考えます。 特別な置き場を作りたくなってしまうかもしれませんが、Railsの提供するMVCのレールを逸脱しない範囲で独自路線を作っていくのが個人的には良いアプローチかなと考えています。POROをモデルの延長線上にあるものと考えれば、app/model
Fat Model1まずはFatステージ1。Railsというものを全然知らない超初心者が陥るステージです。ビューに何でもかんでもロジックを書いちゃう。その結果がFat Viewです。 次にFatステージ2。ある程度Railsに慣れてきた開発者が陥るステージです。Modelへのロジック分離がうまくできず、Controllerにロジックが集中する。その結果はFat Controllerです。 最後がFatステージ3。Railsを習熟したエンジニアであればModelにロジックを寄せていくのが定石です。その結果出来上がるのはFat Modelです。 このように どんなにRailsに習熟してようと最終的にぶつかる壁がFat Model です。 Fat Model対処のための3つのアプローチFat Modelを倒すためのアプローチとして、僕は下記の3つに分けて整理すれば良いのではと考えました。 Rai
目次 購入モチベーション購入したモデルHHKB Hybrid 特徴 無線接続/有線接続USB Type-Cしばらく使ってみた感想 静音性キータッチまとめおまけHHKB Professional HYBRID Type-S を購入してしばらく経ったので使ってみた感想を書いてみます。 例のブツです #HHKB pic.twitter.com/agDV1Hol5Z — toshimaru (@toshimaru_e) December 16, 2019購入モチベーションnot Type-SなHHKBはややうるさい 自分でタイピングしているときは気にならないけど、隣でバシバシ叩かれているのを体験するとやや音が耳障りなときがある。ノイズを気にせずタイピングできるように静音性のある Type-S が欲しかったType-C接続 mini USB接続で macbook の Type-C と接続しているのが
1前提環境MySQL 5.7方法以前紹介した連番の仮想表を作るテクニックを駆使すればやりたいことが実現可能です。 MySQLで連番の仮想表を作る 日付だけのテーブルを作る対象期間、つまり2018年1月1日〜2018年1月10日までのデータを生成します。 SELECT '2018-01-01' + INTERVAL seq_no DAY AS date FROM (SELECT @seq_no := 0 AS seq_no UNION SELECT @seq_no := @seq_no + 1 AS seq_no FROM information_schema.COLUMNS LIMIT 10) tmp;
目次 対象読者採用経路について サービス経由ダイレクトメッセージ経由経歴書・レジュメ レジュメを公開するレジュメの内容日本の履歴書という悪習面接外資系(GAFAM)について企業とのコミュニケーションおすすめ企業2019年は転職というイベントがあった。 どんな感じで転職活動をしたのかを備忘録として残しておこうと思う。 対象読者主に自分のために残しておいているが、下記のような人に役立つかもしれない。 ソフトウェアエンジニアとして転職を考えている人今後転職するかもしれないソフトウェアエンジニア各社の採用担当者、あるいはヘッドハンター採用経路についてサービス経由前回の転職活動の場合は Wantedlyをメインで使って、そこから繋がったいくつかの会社を訪問した上で転職(就職)先を決めた。そのあたりは下記の記事にまとめてある。 就活日記(完) 就職 今回使ったのは主にスカウト型のサービスがメイン。転職
✕✕即時性: コミュニケーションがどれだけ早く成立するかオーディエンスへの浸透度 : オーディエンスにメッセージを届けるためにどれくらい効果的か負担: そのコミュニケーションに参加するための必要な時間と労力コンテキスト: 特定のコミュニケーション方法で必要とされるコンテキストがどれくらいあるか構成の緻密さ: 伝えたいことがどれくらい緻密に構成されていなければいけないか優れたリーダーの条件周囲から最良のものを引き出す 自分自身や少数の「ロックスター」だけを重視してはならない。周りにいるすべてのひとたちから裁量のものを引き出せ優秀な組織とそうでない組織の違いはこの能力の有無で出るメンバー個人のビジョンと企業やチームのビジョンを一致させるように支援する規範たれ リーダーは自分が期待している行動の規範となるべきまわりのひとはリーダーの悪い行動も真似ることがあるので気をつけろクソの傘たれ 上層部から
この記事はGo7 Advent Calendar 2019五日目の記事です。 やりたいこと下記のように直列で動作し実行時間の長いGoのプログラムを、並行処理に変えて処理を効率化させます。 package main import ( "fmt" "time" ) func main() { for i := 0; i < 100; i++ { time.Sleep(2 * time.Second) // 長い処理 fmt.Println("End:", i) } }
TL;DR株式会社Gunosy → メドピア株式会社※以下ダラダラと書いた雑文。興味ある人だけ読んで。 試用期間が終わってとりあえずはやっていけそうな感じなので、いわゆる在職エントリってやつを書いてみます。 Why 在職エントリ?ある程度様々な経験も積んでシニアレベルのエンジニアとして会社側の期待値も高い中での入社となり、試用期間中は黙ってひたすら期待された成果を出せるように一生懸命働いてました。 また前職はイヤだったから辞めたとかではないので、転職してお互い「あ、なんか違う」となるのがちょっと心配でした(平たくいうと「ビビってた」ということになりますw)。 試用期間を終えてとりあえずはやっていけそうな感じになったので、報告がてら本エントリを書くことにします。 あとはキラキラ希望に満ち溢れた退職エントリや転職エントリ書ける歳でもなくなってきたなーという感じもある。 前職でやってたこと前職は
環境 対応Pull Request 私のSystemSpec、遅すぎ…? Dockerfile Chrome failed to start: exited abnormally 公式ではno-sandboxをデフォルトにはしてくれない? Securityを担保するためのsandbox 参考 Rails on Docker な環境上に SystemSpec(System Test + RSpec) を導入しました。 環境 今回SystemSpecを導入したのは下記のような環境です。 プロジェクト: RailsTwitterClone docker-compose Ruby 2.6 chromium-driver gem rails (5.2) rspec-rails selenium-webdriver capybara 対応Pull Request Re-try System Spec
GitHub Marketplace ※v1と同一URL2つあるので、「GitHub Actions」というキーワードでGoogle検索したときに古いv1の情報が出てくることもあるので注意してください。v1前提なのかv2前提なのかで全く内容が異なってきます。 またv1が手元で使えるからといってv2が自動的に使えるわけではありません。それぞれ別物なのでv1が使えてたとしても、v2が利用可能対象ユーザーとして降ってくるまでは使えません。 導入方法設定方法は簡単。GitHub Action v2が使える対象になっていれば、下記のように表示されますので Enable Repository してください。 有効化されると、下記画面が出てくるのでGUIでポチポチワークフローを設定するもよし。 .github/workflows以下に直接YAMLを置くもよし。動くYAMLサンプルは下記の公式 start
Goの習作としてSyntax Highlight可能なcatコマンドを作った。 夏休みの工作で作ったやつ。Go 製の Syntax Highlight な cat コマンド. | toshimaru/nyan: Colored `cat` command. https://t.co/lu1CL4YdDi — toshimaru (@toshimaru_e) August 14, 2019モチベーション全く同じコンセプトのツールとしてccatがあるのだが、デフォルトのハイライト色が黒背景のターミナルだと見づらいという問題があった。 更に強力なcatコマンドとしてRust製のbatがあるのだが、これをccatとともに併用していて配色がとても美しい感じに仕上がっていたので「よし、じゃあGoで配色がいい感じのやつ作ってみるか」と思い立って作成開始したやつ。 ちなみにccatとの実装の違いでいうと、
What is HRT? アンチパターン1・コメントが怖い 説明 解決策 アンチパターン2・理由がない 説明 解決策 アンチパターン3・誹謗中傷 説明 解決策 アンチパターン4・大量コメント 説明 解決策 アンチパターン5・長大な議論 説明 解決策 なぜHRTなレビューが必要なのか? 全ては心理的安全性のため 参考情報 『Team Geek』の書評でも書いたんだけど、コードレビューのときはHRTの精神を大事にしたい。 What is HRT? HRTとは下記の3つの精神のことだ。 Humility(謙虚) Respect(尊敬) Trust(信頼) HRTについて詳しくは弊ブログの下記記事を参照。 心理的安全性の阻害はHRT精神の欠如によって起こる。常に仲間に対して謙虚、尊敬、信頼の念を持とうな。お兄さんとの約束だぞ! 『Team Geek』読んだ ~HRTの精神を知り会社でサバイブしてい
体験入社してます pic.twitter.com/f2Ga5LE5Es — toshimaru (@toshimaru_e) July 11, 2019 SmartHR社の体験入社に参加してきました。同社の体験入社制度に関しては下記の記事に詳しいです。 エンジニア向けの体験入社制度ができました - SmartHR Tech Blog 今回は体験入社を1スプリント分の一週間、営業日換算で4日間体験入社させてもらいました。 なぜ参加したか? SmartHR社のことはRubyKaigiや会社紹介資料などを通して知っており、傍目から良い会社そうだなぁという印象は持っていました。実際にSmartHRの中の人たちとも面談を通して直接話す中で、SmartHR社での働き方に興味が湧き、今回「体験入社をしてみたい!」という僕の申し出を受け入れてもらったかたちとなります。 僕が特にSmartHR社に関して良い
次のページ
このページを最初にブックマークしてみませんか?
『toshimaru/blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く