単純なCSSの話。
とあるサイトの表を選択しようとしたらできなくて、CSSを疑ったらちょうどそのようなプロパティがあったので学び。
user-select
というプロパティがあって、これの値が none
のとき、コンテンツの選択ができなくなる。最新のChromeとFireFox以外はベンダープリフィックスが必要みたい。
開発者ツールからそのプロパティを無効にして表をコピー→スプレッドシートに転記→印刷までできたので満足です。
メタプログラミングRubyなど、手を動かししながら本を読みたいときにJupyter notebookだとファイルに楽に残せて便利っぽい気がしたので、実行環境を作った。という下書きがあったので供養。
Python3を入れたかったので、brew insatll python3を
実行したらbrew upgrade python
を実行しろって言われた。
それ2.7消えて全部死ぬやつでは、って思ったんだけど、そういうわけではなく、Homebrewのfomula名が変わっていたらしい。
Homebrewの'python'でインストールされるものがpython3になった
一回考え直して、pyenvインストールしたあとに、pyenv install 3.7.0
実行した。
Pyenvの使い方
$python -V Python 3.7.0
OK.
pipがPython3で使えるようになったので、pipでJupyterを入れていく。
Rubyでシュッとグラフを書く with Jupyter notebook ここを見ながらシュッと。
これで動くんだけど、、どう考えてもDockerで動かしたほうが手軽な気がしてきたので、さっさとdocker-compose.ymlを書くことにしよう。
新しくRailsのアプリケーションを作って書いた。データベースはPostgeSQLを使う想定。 GitHub - ikaruga777/taskleaf実際にdockernizeしたものはこちら。(現場Rails本のサンプルアプリケーションを使った)
Quickstart: Compose and Rails | Docker Documentation ココらへんを参考にした。
FROM ruby:2.6.3 RUN apt-get update -qq \ && apt-get install -y postgresql-client \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV LANG=C.UTF-8 \ TZ=Asia/Tokyo \ APP_HOME=/usr/src/app WORKDIR $APP_HOME COPY Gemfile* $APP_HOME/ RUN bundle install COPY . $APP_HOME/
RUN
命令でDockerfileのImageに対してコマンドを実行する。
RUN apt-get update -qq \ && apt-get install -y postgresql-client \ && apt-get clean
apt-get update
の -qq
オプションはエラー以外を出力しないもの。apt-get install -y postgresql-client
でインストールENV
命令は環境変数を設定できる。
今回は文字コード、タイムゾーン、アプリケーションのルートディレクトリを設定した。
WORKDIR
命令はアプリケーションの作業ディレクトリを設定できる。設定したディレクトリが存在しない場合は自動で作成される。
Dockerfile リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
COPY
命令はローカルファイルをコンテナファイルにコピーする。 ローカルのカレントディレクトリのGemfile*
をコピーしてbundle install
を実行後、残りのディレクトリをごそっとコピーするようにした。Quick guildeでは /myapp
とかルートディレクトリからディレクトリを生やしていたので、とりあえずusr/src/
で作業するようにした。
これでカレントディレクトリのRailsアプリケーションを実行するためのコンテナの作成はOK
Railsのプロセスが動くコンテナはできたので、docker-composeでその他のコンテナを集めて、実行環境を作っていく。
version: '3' services: db: image: postgres:11.2 environment: POSTGRES_PASSWORD: postgres ports: - '5432:5432' volumes: - postgres-data:/var/lib/postgresql/data app: &app_base build: . command: /bin/sh -c "rm -f ./tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - '3000:3000' volumes: - .:/usr/src/app environment: RAILS_ENV: development depends_on: - db spring: <<: *app_base command: bin/spring server ports: [] volumes: postgres-data:
postgres
と上で作成した、Appコンテナ、springサーバーを起動するためのサービスを定義する。
PostgreSQLのコンテナpostgres:11.2
は POSTGRES_PASSWORD
環境変数でデータベースパスワードを設定できる。そのまま、5432番ポートでつながるようにマッピング。
postgres-data
というボリュームをファイルの下の volumes:
で定義しているので、postgresのデータをそのままボリュームに指定する。/var/lib/postgresql/data
がデータを保存するディレクトリだということはDocker Hubのページから確認できる。
docker-compose build
コマンドでDockerfileの内容でbuildされる。
起動時には bundle exec rails
の前に rm -f ./tmp/pids/server.pid
を実行している。これはdocker-compose kill
を実行したときにファイルが残って、次回起動時にエラーになっちゃうから。
docker-compose up
したあとにappコンテナ内でRailsのコマンドを効率的よく実行したいので、spring
をdocker-compose exec
コマンドで呼べるようにしている。
高速に開発できる Docker + Rails開発環境のテンプレートを作った - Qiita ここ眺めて、<<
がdocker-compose.ymlの記法に見当たらないと思ってさまよっていたんだけど、YAMLの記法だった。&foo
でハッシュに名前をつけれて、<<: *foo
でその内容をそのまま展開できる。これで同じコンテナで違うcommand
を持つserviceが作成できる。
config/database.yml
の内容をdockerのpostgresで使えるように設定する。
- host
にはdocker-compose.yml
に記載したサービスdb
を指定する
- user
、password
には postgres
を設定する。
- user
はpostgres
コンテナのデフォルト、password
はdocker-compose.yml
で指定した環境変数POSTGRES_PASSWORD
を設定する。
ここまで書けば、
docker-compose build
docker-compose up
でRailsのアプリケーションがDockerコンテナで実行できる。
読み返すと甘いところもあって
/vendor/bundle
をvolumeに外出しできそうmini-racer
をインストールしてたりするけどどっちがいいのか迷ってるなどなど改善できそうなので、やっていこうと思う。
今更の話だけど、3/22 , 3/23に外苑前の日本オラクルで行われたRails Developers Meetup 2019に参加した。エレベーターのボタンの押し心地が良かった。
新人研修のやりとりで発生したレビューを分析するというとても手間がかかっていそうな発表だった。レビューの発話者の立場で一番多いのがレビュアー、レビュイー以外の一般社員というのがとても素敵だと思った。
可読性の高いテストコードとは
脳に負担をかける要素とは
途中からプロジェクトに参戦して、shared_contextの内容を把握するのに一苦労したので、新規に作るときはshared_contextをできるだけ使わないようにする決意をした。
未来大×企業エンジニア 春のLT大会 で喋ってきた。学生若すぎて心が破滅した。
キーボードはIIZEって話と、開発環境に凝りすぎないようにする天秤の話が8:2みたいな発表をした。 https://speakerdeck.com/uvb_76/kai-fa-huan-jing-wu-li-wozuo-ru
「これだけは伝えたい技術」ってテーマについて、周りの企業の方々も結構苦慮していた感があった。
ココらへんがよかったなあー
若い学生に向けたのでまあまあウケは良かったと思う。しかし、アウトプットに対する影響目標を指定せずにノリで資料を作ってしまったのは反省。今回キーボードに全振りするのなら、例えば「発表を見た学生がキーボードを作った報告」を定量的目標として設定できたはずで、最初にこのゴール設定ができていなかった。今回は「その道具にこだわる上で時間は有限なので、その取捨選択をしましょう」という話をどちらかというとしたくて、それが中途半端になってしまった。話すテーマ自体もいろいろ作っている間に二転三転してしまって、あまり資料の質を上げることができなかった。結局自分に「これだけは伝えたい技術」として自身を持って話せる技術がなかったということなんだと思う。これはこれからの課題として残った。今までのツケだ。
「学内に学生が自由に使える(?) 工房の存在を知ったー」みたいな話もあったので、学生の興味の幅を広げることができた、という意味では今回のLTは無駄ではなかったと思う。みんな電子工作としてキーボード作ろう。
2017/12/11 HHKB買った - 鳥人雑技団なんて地元にはない HHKBは軸にo-ringをはめると静かになるのでおすすめです。
RubyKaigi 2019へ参加することになって、飛行機の中でこれ書いてます。 どのセッションが面白そうか@hsbtさんと雑談したときのメモを残していたので、ここにもまとめておこうと思います。URLに付随するコメントはhsbtさんと自分が雑談していたときのメモです。自分の個人の感想が混じっているので、ご了承ください。
RubyKaigiここは見に行っとけ情報を手に入れた 16 replies
https://rubykaigi.org/2019/presentations/giosakti.html#apr18 コンテナオーケスティングをRubyで書いたよ、って感じのやつ 。
https://rubykaigi.org/2019/presentations/ioquatix.html#apr18 FiberっていうThreadよりも細かい非同期処理のシステムを使いこなして超早い分散処理書いたよってやつ 。
RMagick, migrate to ImageMagick 7 - RubyKaigi 2019 RMagickっていうImageMagickのラッパーがあるんだけど、それを7に対応させるために泥臭いことしたよっていうやつ 。
Pattern matching - New feature in Ruby 2.7 - RubyKaigi 2019 ruby 2.7でパターンマッチ(正規表現とかはまた異なる。Rustとかでは実装されている)をじっそうするよ?っていうやつ 。
How RSpec works - RubyKaigi 2019 RSpecの人。単純にすごい。
Practical mruby/c firmware development with CRuby - RubyKaigi 2019 mruby/cじゃん。
Better CSV processing with Ruby 2.6 - RubyKaigi 2019 2.6以降のときにCSVのいろいろ踏んだので単純に見に行きたい枠 。
Actionable Code Coverage - RubyKaigi 2019 このパンダはすごいひと。 https://github.com/grosser/parallel とかいう超簡単に並列処理するくんを作った人。 この人がシンプルなカバレッジツールを作ったのでその宣伝をするみたい。
Building a game for the Nintendo Switch using Ruby - RubyKaigi 2019
Nintendo Switchにはmrubyが使われているよ、じゃなくて、
Nintendo Switchにmrubyを入れたよ。というやつっぽい。スポンサーに喧嘩打っていくスタイルのやつ。 普通に間違っていた。
A Dark Room for Nintendo Switch - Nintendo Game DetailsというゲームをmRubyで書いたよっていう話だった。
Cleaning up a huge ruby application - RubyKaigi 2019 クックパッドのひとがコード消すためにやったことを並べていくやつ 。
Fuzzing native Ruby code with Kisaten - RubyKaigi 2019 Fuzzingっていう問題になりそうなデータをたくさん食わせてバグを見つける手法をRubyで実現する?やつ 。
The challenges behind Ruby type checking - RubyKaigi 2019 型チェックをRubyにいれてみたやつ 。
Reducing ActiveRecord memory consumption using Apache Arrow - RubyKaigi 2019 むらけんさんだ。Apache Arrowっていう言語を超えてメモリデータをやり取りするソフトウェアの話 。
Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019 FluentdとかEmbulkとかつくったすごいひと 。
それでは3日間頑張りましょう。