かすみん日記

暇なときに何か喋ります

【Rails】ブラウザの再読み込みを自動化

キーワード: ブラウザ、自動更新、自動読み込み、オートリロード、ライブロード

railsで開発しているとき、ファイルに変更があるたびに手動でブラウザの更新ボタンを押さなきゃいけないのはダルいので、自動で再読み込みしてくれるようにした。

Browsersyncというnpmパッケージを利用します。

環境

インストール

Browsersyncのインストール;

npm install -g browser-sync

-g オプションはグローバルにインストールするということらしいです。

設定ファイルなしで実行

まずはサーバーを立てます;

rails server

次に、browser-sync を起動します;

browser-sync start --proxy localhost:3000 --files "app/assets/stylesheets/*.css.*","app/views/**/*.html.*","app/assets/javascripts/**/*.js.*"

引数で監視するファイルを指定しています。

以上で準備は完了です。 適当にviewファイルなどをエディタで編集して保存すると、ブラウザでページが自動的に再読み込みされます。

設定ファイルを作る

上記のコマンドを毎回打つのは大変なので、browser-sync の設定ファイルを作成します。

rails new で生成されたディレクトリ内で、次のコマンドを実行します;

browser-sync init

すると bs-config.js が生成されます。

それを開いて、下記の箇所を修正します;

module.exports = {
    // 略
    // "files": false,
    "files": [
        "app/assets/stylesheets/*.css.*",
        "app/views/**/*.html.*",
        "app/assets/javascripts/**/*.js.*"
    ],
    // 略
    // "proxy": false,
    "proxy": "localhost:3000", 
    //略
};

これで、さっきのコマンドの代わりに、以下のコマンドでも同じように働きます;

browser-sync start --config bs-config.js

もう少し楽をする

もう少し楽をしましょう。

rails new したときに生成された package.json に、以下のコマンドを追加します;

"scripts": {
  "start": "browser-sync start --config bs-config.js"
}

そうすれば、rails s した後に次のコマンドを実行するだけ良くなります;

npm run start

以上!

参考

qiita.com

techracho.bpsinc.jp

qiita.com

www.browsersync.io

npm install で permission denied

npm install <package> をすると、権限が無いとエラーが出る。

sudo を付ければ実行できるんだろうが、たかが npm installsudo が必要になる意味がわからん。

結局、node.jsの公式サイトからインストーラーをDLしてnodeをインストールしたのがよくなかった。

ということで、そのインストーラーは使わず、nodebrew を使って node をインストールし直す。

まずはアンインストール

下記記事を参考に、pkgでインストールした nodenpm を削除;

geniusium.hatenablog.com

次にインストール

下記記事を参考に、nodebrew を使って node をインストールする;

geniusium.hatenablog.com

おわりに

これで、sudo なしで npm install ができる。

以上。

参考

tech-for.com

【Rails】データベースを変更

環境

内容

何も考えずに rails new をするとデータベースは sqlite3 になるが、herokuではそれが使えないので後からデータベースを progresql に変更したいときがある。

Gemfiledb/database.yml を修正すればいいが手でやるのは馬鹿らしい。

例えば、データベースを progresql に変更するには、以下のコマンドを打てばいい;

rails db:system:change --to=postgresql
bundle install
rails db:create
rails db:migrate

とのことです。

参考

note.com

【Heroku with Rails】git push herokuでエラー

Heroku スターターガイド (Rails 6.x)に従ってRailsアプリをHerokuにデプロイしようとしたらエラーが出た。

理解はしていないが解決はできました。

環境

症状

エラーまでの手順再現;

# railsアプリ作成
rails new myapp --database=postgresql
cd myapp

# データベース作成
rails db:create

# gitコミット
git add .
git commit -m "init"

# herokuアプリ作成
heroku create

この後に git push コマンドでherokuにデプロイしようとすると、エラーが出てrejectされた;

% git push heroku main
略
remote:  !
remote:  !     Could not detect rake tasks
remote:  !     ensure you can run `$ bundle exec rake -P` against your app
remote:  !     and using the production group of your Gemfile.
remote:  !     /tmp/build_176a3f7d/config/boot.rb:4:in `require': cannot load such file -- bootsnap/setup (LoadError)
remote:  !     from /tmp/build_176a3f7d/config/boot.rb:4:in `<top (required)>'
remote:  !     from /tmp/build_176a3f7d/bin/rake:3:in `require_relative'
remote:  !     from /tmp/build_176a3f7d/bin/rake:3:in `<main>'
remote:  !
remote: /tmp/codon/tmp/buildpacks/50d5eddf222a9b7326028041d4e6509f915ccf2c/lib/language_pack/helpers/rake_runner.rb:106:in `load_rake_tasks!': Could not detect rake tasks (LanguagePack::Helpers::RakeRunner::CannotLoadRakefileError)
remote: ensure you can run `$ bundle exec rake -P` against your app
remote: and using the production group of your Gemfile.
remote: /tmp/build_176a3f7d/config/boot.rb:4:in `require': cannot load such file -- bootsnap/setup (LoadError)
略
remote: Verifying deploy...
remote: 
remote: !       Push rejected to shrouded-shelf-31491.
remote: 
To https://git.heroku.com/shrouded-shelf-31491.git
 ! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/shrouded-shelf-31491.git'

解決

Heroku スターターガイド (Rails 6.x)の日本語記事の内容が古かった。

日本語版にはなかったコマンドが英語版には書いてある。

どうやら以下の手順を踏まないといけないらしい;

rails new myapp --database=postgresql
cd myapp
rails db:create

# 次のコマンドを実行する必要がある;
bundle lock --add-platform x86_64-linux --add-platform ruby

git add .
git commit -m "init"

heroku create
git push heroku main

そうすると、最後の git push でエラーが出ずにデプロイが成功する;

remote: Verifying deploy... done.
To https://git.heroku.com/shrouded-shelf-31491.git
 * [new branch]      main -> main

heroku open コマンドを実行すると、アプリがブラウザで開く。

結論

日本人は情弱

DeepLで翻訳するときに改行を消す

DeepLでは改行は文末だと認識されてしまう。

毎回手で改行を消すのは面倒なので、自動で改行をスペースに置き換えるツールを作った。

znuko.github.io

使い方

入力欄の「Sample」ボタンを押すとサンプルテキストが挿入されます。

「Open DeepL」ボタンを押すと、整形したテキストをDeepL翻訳で開きます。

また、自分で置換規則を設定できるようにしてありますので、正規表現で好きな規則を設定してください。

ソース

ソースです。適宜改造してください。

github.com

代替

どうやらそのようなツールはもう既にあるみたいです。

Shaper とか。

Railsのエラーと解決手順メモ

railsのエラーと解決手順のメモです。

環境

作業ログ

rails new myapp --database=postgresql をして、 rails s をするとエラーが出た;

ActiveRecord::ConnectionNotEstablished (could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
):

略

この記事通り以下のコマンドを実行したら、治ったのかはわからないが、少なくともエラーメッセージは変わった;

brew services start postgresql
brew services stop postgresql
brew services restart postgresql

もう一度 rails s をしたら、別のエラーメッセージが出た;

ActiveRecord::NoDatabaseError (FATAL:  database "deepl_helper_development" does not exist
):

略

この記事通り以下のコマンドを実行したら、エラーはもう出なくなった;

rails db:create

http://127.0.0.1:3000 にアクセスするとちゃんとrailsの初期ページが表示された。

参考

qiita.com

rails-ambassador.herokuapp.com

【LaTeX】句読点を自動置換

目的

句読点は 、。 で入力するけど、出力のPDFでは全角カンマ・ピリオド ,. にしたい。

制約

  • とにかく楽したい
  • OSのシステム設定で句読点をカンマ・ピリオドにするのはヤダ
  • エディタの一括置換は毎回やるのだるい
  • 外部プログラムで自動置換は、latexmk コマンド以外打ちたくない
  • なんならファイル上では 、。 のままでいてほしい

実装

、。 の文字を、,. の文字を返すようなコマンドにする。

例えば、~ 一文字で改行禁止のスペースの意味になるような感じ。

和文文字はそのままではアクティブ(コマンド化)にはできないので、そのカテゴリーコードを変更する。

\kcatcode"3001=15 とすると、(U+3001)が属するUnicodeブロックに含まれる文字のカテゴリーコードが全て15に変更される。

カテゴリーコードが 15 の文字であれば \ から始めなくても文字単体でコマンド名とすることができる。

例えば \def、{,} のような感じでコマンドが定義できる。

すると、文中で単に と書いている読点は、全角のカンマ に置き換わることになる。

問題点

と同じUnicodeブロックに含まれる文字のカテゴリーコードが全て 15 に変更されたが、カテゴリーコード 15 の文字が文書中に現れるとタイプセットエラーになる。

が属するUnicodeブロックには、普段からよく使うカギ括弧 「」 やにょろ なども含まれるが、これらの文字が文書中で使えないことになってしまう。

なので置換する句読点 、。 以外の文字は、元の文字をそのまま返すコマンドとして再定義してやらないといけない。

\def「{「} と書いてしまうと無限ループになってしまうので、Unicodeの番号で \def「{\char"300C} のようにして再定義する。

まだ他にも副作用があるのかもしれないが、一応はこれで大丈夫なはず。

あとは一応、和文の句読点 、。 が使いたいときには使えるように適当にコマンドを用意しておいてやればいいかなと。

\newcommand\読点{\char"3001}
\newcommand\句点{\char"3002}

サンプルコード

uplatex 用のサンプルコードを置いておきます。

%% Typeset: uplatex
\documentclass[uplatex,a6paper,papersize]{jsarticle}

%% 句読点(、。)を含むUnicode Blockのカテゴリーコードを15に変更
\kcatcode"3000=15

%% Unicode文字を再定義
\usepackage{newunicodechar}
%% CJK Symbols and Punctuation
%% Range: 3000—303F
%% Quantity of characters: 64
\newunicodechar{ }{\char"3000}
\newunicodechar{}{\char"FF0C}% <- 3001
\newunicodechar{}{\char"FF0E}% <- 3002
\newunicodechar{}{\char"3003}
\newunicodechar{}{\char"3004}
\newunicodechar{}{\char"3005}
\newunicodechar{}{\char"3006}
\newunicodechar{}{\char"3007}
\newunicodechar{}{\char"3008}
\newunicodechar{}{\char"3009}
\newunicodechar{}{\char"300A}
\newunicodechar{}{\char"300B}
\newunicodechar{}{\char"300C}
\newunicodechar{}{\char"300D}
\newunicodechar{}{\char"300E}
\newunicodechar{}{\char"300F}
\newunicodechar{}{\char"3010}
\newunicodechar{}{\char"3011}
\newunicodechar{}{\char"3012}
\newunicodechar{}{\char"3013}
\newunicodechar{}{\char"3014}
\newunicodechar{}{\char"3015}
\newunicodechar{}{\char"3016}
\newunicodechar{}{\char"3017}
\newunicodechar{}{\char"3018}
\newunicodechar{}{\char"3019}
\newunicodechar{}{\char"301A}
\newunicodechar{}{\char"301B}
\newunicodechar{}{\char"301C}
\newunicodechar{}{\char"301D}
\newunicodechar{}{\char"301E}
\newunicodechar{}{\char"301F}
\newunicodechar{}{\char"3020}
\newunicodechar{}{\char"3021}
\newunicodechar{}{\char"3022}
\newunicodechar{}{\char"3023}
\newunicodechar{}{\char"3024}
\newunicodechar{}{\char"3025}
\newunicodechar{}{\char"3026}
\newunicodechar{}{\char"3027}
\newunicodechar{}{\char"3028}
\newunicodechar{}{\char"3029}
\newunicodechar{〪}{\char"302A}
\newunicodechar{〫}{\char"302B}
\newunicodechar{〬}{\char"302C}
\newunicodechar{〭}{\char"302D}
\newunicodechar{〮}{\char"302E}
\newunicodechar{〯}{\char"302F}
\newunicodechar{}{\char"3030}
\newunicodechar{}{\char"3031}
\newunicodechar{}{\char"3032}
\newunicodechar{}{\char"3033}
\newunicodechar{}{\char"3034}
\newunicodechar{}{\char"3035}
\newunicodechar{}{\char"3046}
\newunicodechar{}{\char"3047}
\newunicodechar{}{\char"3038}
\newunicodechar{}{\char"3039}
\newunicodechar{}{\char"303A}
\newunicodechar{}{\char"303B}
\newunicodechar{}{\char"303C}
\newunicodechar{}{\char"303D}
\newunicodechar{}{\char"303E}
\newunicodechar{}{\char"303F}

%% 元の句読点を退避
\newcommand\読点{\char"3001}
\newcommand\句点{\char"3002}

\begin{document}\huge

やあ,こんにちは.

やあ、こんにちは。

やあ\読点 こんにちわ\句点

\end{document}

github にも置いておきます。

参考

zrbabbler.hatenablog.com

en.wikipedia.org

unicode-table.com