こんにちは寝る

古い記事の情報は参考程度にお願いします

Rails6でRedisを利用する

概要

railsのセッション情報の保存先はcookieなのですが
このままだと4kbまでしか保存できなかったりセッションリプレイのセキュリティリスクがあります。

rails的にはセッションに重要な情報を置くなというスタンスらしいですが(ソース見つからず)
とはいえ、制限があったりセキュリティリスクがあるというところでredisなどのストレージに保存したい要求もあります。
(この仕様は根が深そうだ)

ライブラリを入れる

redis-railsが昔は使われていたようですが
rails5.2以降からはフラグメントキャッシュの仕様が追加されたとかで利用されなくなっています。

セッションストレージを利用したい場合はredis-actionpackを利用するようですのでこちらをgemに追加してください。

gem 'redis-actionpack'

redis-actionpackの設定をする

以下の内容をconfig/initializers/session_store.rbに設定。

それぞれのオプションはredis-actionpackを参照してください。

# {Rails.application.class.parent_name.downcase}は変えたほうがいいかも、rails6.1でparent_nameが削除されるみたい
MyApplication::Application.config.session_store :redis_store,
  servers: ["redis://localhost:6379/0/session"],
  expire_after: 90.minutes,
  key: "_#{Rails.application.class.parent_name.downcase}_session",
  threadsafe: true,
  signed: true,
  secure: true

railsの設定次第では設定するファイルが違うかもしれません。

余談

redisは今回始めて設定したのですが、redisのセキュリティは基本的にパスワードは設定せず
信頼されたクライアントが接続することを前提に設計されているみたいですね。

ただ、設定をうまくできず不正アクセスが多いとのことでパスワードをつけないで起動した場合は「protected mode」で自動的に起動するようです。
(ちなみにDocker環境で利用しているredis:alpineではデフォルトでOFF設定になるみたいです)

Redis セキュリティ – Redis 日本語訳

役に立つかわからない情報

Docker環境でsigned: trueの時にアクセスの度にredisサーバーに新しいセッションが作られるという現象に遭遇した。

ここを参考にしてください、依存ライブラリが新しいと発生するらしい。

https://github.com/redis-store/redis-actionpack/issues/33

ただ、これにするとcookieの暗号化…正確にはセッションIDの暗号化…が無くなるようです、暗号化が影響して不具合が発生しているようです。

GithubとJiraをUnitoを使って連携する

Unitoとは?

https://unito.io/

UnitoとはJiraとGithub、WrikeとJira、JiraとTrelloなどの組み合わせで
相互同期(または一方同期)が簡単にできるWebサービスです。

組み合わせについてこちらのページをご確認ください。
https://unito.io/upcoming-integrations/

例えばJiraとGithubではJiraの特定の課題タイプとGithubのissueが同期することができます(条件設定可能)
つまりGithubに存在するissueは、詳細情報含めて自動的にJiraと同期され、逆にJiraに存在する課題もissueに存在します。

www.youtube.com

メリット

  • 課題の管理を一元化することができる(情報も同期されるので内容の違いも無く管理コストが下がる)
  • 様々なサービスの連携処理を自社で管理する必要が無い

デメリット

  • 料金は高め *1
  • 自由度は低い。最高の効率でやりたい場合は自社で用意して上げる必要があると思います。ただし普段遣いレベルであれば全然問題ない範囲です。
  • 課金対象ユーザーの検出方法がわかりにくい *2

主観

Unitoで事前に同期に対応しているサービス確認する必要はあるが
同期に対応しているサービスだけ使っていて、それぞれのサービスで課題を管理しているという状況であれば管理コストの削減が期待できる。

Jiraを普段使っていて、Github、Trelloを使っていてJiraの状況に合わせて手動でこれらのサービスの状態も変えている
または厳密なルールを設けてGithubとJiraを連携している(ラベルとか付けたり、Jiraだと設定次第では同期のような事も可能なので)

こういった事はUnitoを使えばものすごく単純なフローになり、ヒューマンエラーの防止と
情報が常に新しいことを保証することができるようになる。

ただ、使い始め1ヶ月ぐらいは慣れる + 同期の設定のため、一時的に管理者に負荷がかかる可能性があるので
導入するときはある程度時間が取れる時に導入をしたほうが良い。

Unitoを使ってみる

動画の通りですが何をしているのかこちらでも簡単に紹介します。

1. 同期の作成を行い、連携先を設定する

www.youtube.com

最初に行うのはどのサービスとどのサービスを同期させるのかという設定が必要です
事前にUnitoと連携していおいたサービスが利用可能です。

双方同期も出来ますし一方同期も可能ですので矢印でそれを設定してください。

Tips.

Unitoと連携する時の注意
ここで連携したユーザーが同期された課題やissueの投稿者やbotの管理者になるので注意。

Jiraに普段使ってるアカウントを連携すると、そのアカウントが報告者の同期された課題がたくさん作成されたりしますので
お金に余裕があるならばBotユーザーを作りこちらで連携させておきたいところです。

参照

https://guide.unito.io/en/articles/3478467-how-to-set-up-a-sync

2. フィルターの設定をする

www.youtube.com

デフォルトの状態だとすべてのissueや課題を同期してしまうので
条件を設けて同期するissueや課題を絞り込むことができます。

例えばJiraであれば以下のような条件で同期する課題を絞り込むことができます
どんな事ができるのか一度見てみるといいと思います。

  • 案件タイプが「タスク」の課題
  • ラベルに「同期」がついている課題

参照

https://guide.unito.io/en/articles/3478467-how-to-set-up-a-sync#which-tasks-are-allowed-to-sync

3. 同期するフィールドの設定

www.youtube.com

基本、いじらなくても問題ないですが
この情報は一方同期で良いとか細かい同期項目をしたい場合はここで調整してください。

Tips.

JiraとGithubを同期する場合、LabelsをGithubからJiraへの一方同期にした方が良いです。

Jira側とGithub側でラベルの設定数が違うと基本 多い方のラベル設定に同期されてしまうようで最終的にUnitoの同期ログにエラーが出てきてしまいました
(もしかすると設定が悪いだけかもしれませんが留意しておくといいかも)

参照

https://guide.unito.io/en/articles/3478488-how-to-choose-which-fields-sync-and-how-they-re-mapped-between-tools

4. オプションの設定

ヘルプが見つからなかったのですが、以下の2つが設定可能だと思います。

  • 同期をする以前のissueとか課題を同期するか?
  • 自動同期設定をするか?

※ 作成後に編集画面を開くとオプション項目が増えていたりするので見てみると良いです。

5. ユーザーの連携

今のままだと、JiraのユーザーAとGithubのユーザーAを判断することができず
Jira側の課題の担当者のユーザーAのとGithubのissueの担当者で同期することができません。
(Unitoから見ると同期するべき課題はわかるが、Jiraの担当者がGithubのどのアカウントと連携するかわからない)

なので、JiraとGithubのこのアカウントはユーザーAであると定義する必要があります。

Tips.

参照を見てほしいですが、設定する画面の更新頻度が1日に1回とかだと思います
それかUnitoと連携をしたタイミングで連携先からユーザー情報を取るのか…

なので、新しくチームに入った人が同期されるようになるには管理者側で設定が必要で
なおかつ1~2日後じゃないと同期されない点について注意してください。

参照

https://guide.unito.io/en/articles/3478523-how-to-map-users-and-assignees-in-your-sync#mapping-users-at-the-workspace-level

最後に

ここまで設定ができればあとは設定項目やヘルプを見ればなんとなくUnitoを使うことができるかと思います。

最初は課金対象ユーザーの算出方法だったり、余計な課題まで同期されてしまったり
エラーが出てるけど詳細がわからなかったりしますが、使いこなせるようになると管理コストを大幅に削減できる
サービスなので是非使いこなせるようになりましょう。

困った時に参考にしたい

*1:プラン別の料金についてはこちら

*2:ヘルプを参照

RailsのMigrationでuniqueの追加・削除

ハマったのでメモ

ユニークキーを操作するときはunique: trueを必ず付ける必要がある。

# 単体のカラムにユニーク
add_index :table_name, :hoge, unique: true
remove_index :table_name, column: :hoge, unique: true

# 複数のカラムにユニーク
add_index :table_name, [:hoge, :foo], unique: true
remove_index :table_name, column: [:hoge, :foo], unique: true

JiraでGithubと同期しながらWBSで管理する

3行ポイント

  • JiraとGithubはUnitoというサービスを使うことで同期ができる
  • Jiraの高度なロードマップより、WBS Gantt-Chart for Jiraの方が使い勝手がいい(次世代プロジェクトでは高度なロードマップが利用できない)
  • コストは約Jira側Standardプラン+WBSで1000円(11〜20人)、UnitoはTeamプラン(〜20名)で6000円。(1人あたり約1300円。Unitoは高めだがメリットは多い)

要件

  • チーム全体で20人以下(それ以上でも可能です)
  • JiraでWBSで管理したい、ガントチャートも見たい
  • Jiraのスクラム的な使い方は将来やりたいと思っているが、現状はウォーターフォールのように使う
  • GithubのissueとJiraの特定の課題タイプの課題を同期させたい
  • 汎用性高く利用したい(Jiraはかなり汎用性が高い)

この要件を満たしたJiraでの管理体制を整えたのでそのメモをここに残しておきたいと思います。

Jira

https://www.atlassian.com/ja/software/jira

JiraはStandardプランを利用する。

Premiumプランとの違いは主に以下の機能のありなしです。*1

  • 高度なロードマップ機能
  • プロジェクトのアーカイブ
  • 課題タイプの階層構造カスタマイズ
  • プロジェクト全体に適用できる自動化処理の制限なし(Standardは500 / 30日リクエストまで)
  • 保存領域制限なし(Standardは250GBまで)

今回の要件ではこれらの機能は最終的には不要という判断になり、Standardになりました。

高度なロードマップ機能は、Jiraの次世代プロジェクトに非対応だったり、使い勝手が悪かったです
強いて言うならばカスタムフィールドを利用して期限を決められるので、よりJiraに寄り添った管理はできますが
それに対してあまりにもメリットがありませんでした。後述するアプリを利用したほうが遥かに使いやすいです。

他、「プロジェクト全体に適用できる自動化処理の制限なし」の機能ですが
こちらもStandardの500 / 30日リクエストで十分に足りますし、最悪、手間ですがプロジェクト個別にコピーして作成すれば同じことです。

Github

https://github.com/

チームでプライベートリポジトリが無料で作成できるようになったのでGithubにはコストはかかりません。

ただしブランチの保護やドラフトプルリクエスト、Wikiなどの機能が制限されてしまうので
このあたりの機能が必要な方はTeamプランに入る必要があります。*2(約 月500円 / 人)

Unito

https://unito.io/

Unitoはサービス同士を連携させるHubみたいなサービスです
詳細は上のURLから公式サイトを見たほうがわかりやすいので興味のある方は見てください。

最初に書いておくと、かなり癖が強いサービスな印象です
細かいことをやろうと思うとそれなりにドキュメントを読まないといけないかもしれません。

課金対象ユーザーをActive usersと表現してるのですが
少し複雑なのでしっかり確認しておいたほうが良いです。
How does Unito pricing work? | Unito Help Center

また、プランの料金が高めです、しかし、Githubとの同期管理を外部に投げられ
issueの内容が全てJiraと同期される事で管理者、エンジニアの時短になり十分なコスト削減になるので
導入するメリットは非常に高いと感じます。*3

JiraとGithubを連携する

ここからは具体的な設定方法を記載します。

JiraをUnitoに連携する

1. Jiraマーケットプレイスから連携アプリをインストールする

「Sync Jira to Work Tools with Unito」というアプリをインストールしてください(無料)

Sync Jira to Work Tools with Unito | Atlassian Marketplace

2. Unito側でJiraと接続する

Unito側の管理画面の「Connections」からJiraの接続を行ってください。

注意点としてこの時点で接続したアカウントで同期された課題などが作成されるので
とある人が報告者の課題ばっかり立つ、みたいな事になってしまいますので、金銭に余裕があれば
同期用のアカウントをJiraで取得してそのアカウントとUnitoを連携させたいところです。

これでJiraとUnito側の連携は終了です。

GithubをUnitoに連携する

1. Unito側でGithubと接続する

Unito側の管理画面の「Connections」からGithubの接続を行ってください。

ここでも接続したときのアカウントがBotを利用しますので
できれば同期用のアカウントを取るか、削除を絶対に行わないユーザーで接続をしてください。

おそらくアプリのインストールを求められますのでそのアプリをインストールすると、自動的に連携がされます。

sleepost.hatenablog.com

*1:Jiraの料金プランはこちら

*2:Githubの料金プランはこちら

*3:Unitoの料金プランはこちら

WindowsでDataGripのmysqldumpを利用する

結論

WindowsMySQLが入っていないのでダウンロードする必要がある。

MySQL8以降だと--skip-column-statisticsを設定する必要がある。

インポートするときに--default-character-set=utf8をしないといけないかも(環境による?)

動作環境

  • Windows10
  • DataGrip 2020.2
  • MySQL 8

DataGripでdumpを使う

DataGripではデータベースやテーブルを右クリックするとmysqldumpを使ってエクスポートする項目があるがこれを使うためにはWindowsならmysqldump.exeが必要になる。

なので、MySQL公式からMySQLダウンロードして解凍する
解凍後は適当なフォルダに移動させておく。

mysqldump.exeを探す

DataGripでmysqldumpを使ってエクスポートするを押すとウィンドウが開き
mysqldump.exeまでのパスの入力を求められるので、解凍したフォルダのbinフォルダの中にあるmysqldump.exeを指定する。

その後、MySQL8の場合は--skip-column-statisticsを指定しないとエラーが出ることがあるので指定する
一度エクスポートしてみてエラーがでたら指定してみるほうが良いかも。

(このオプションはMySQL5.7以下で管理しているDBに対してMySQL8で操作しようとすると起こるエラーを防ぐ?)

インポートする

またもや右クリックからインポートもすることができるのでmysqlを使ってインポートを使う
こちらもmysqldumpと同じくmysql.exeまでのパスを求められるのでbinフォルダの中から探して指定する。

環境によってはUnknown command '\''.が出るので--default-character-set=utf8を指定しておくのが吉。

便利なオプション

INSERT文だけエクスポートする(+カラム名もいれる) --no-create-info --complete-insert

いきなり個人事業主(フリーランス)として働くことになったら

人生は何があるかわからない
今までフリーランスとは全くの無縁だったのにフリーランスになることもあるかもしれない。

そんな状況になってしまった人の為に残します。

やること

以下のことはやらなきゃ駄目です。

1. 国民年金国民健康保険への加入

区役所にいって国保/年金で受付しましょう。
「退職後14日以内に」とか言われてるかもしれませんが特に問題ありません。

込んでなければだいたい10分もあれば全部終わります、必要書類も記載しておきます。

退職後であれば以下の書類で問題ありません

  • 本人確認書類(運転免許書やマイナンバーカードなど)
  • 通知カード、マイナンバーカード(マイナンバー記載があります)
  • 健康保険資格喪失証明書(会社から送られてきます、無ければ問い合わせ)
  • 年金手帳

※ 区によって差異はあるかもしれませんので確認推奨です。

もし、未払い期間があっても払えますので安心してください
ただし、貯金がカツカツの場合は手痛い出費になってしまうかもしれませんので注意。

2. 事業用の口座を作る

これは作らなくても問題はないのですが用意しておいたほうが後で楽ができます。

個人事業主になると必ず確定申告を出さなければなりません
そんな時に売上と経費を計算するためにそれ専用の口座を持っておくと
後述するクラウド会計ソフトと連携でき、帳簿がかなり楽になります。

ついでに万が一トラブルがあった時
プライベートの口座を開示する必要が無くなるので精神面的にも安心できます。

なお、基本的には個人事業主として事業用の口座を作ることになりますが
一部の銀行では個人口座を事業用として利用してはいけない場合があります。

利用規約はしっかりと確認して口座を用意することをおすすめします
なお、長期間フリーランスが確定している場合は屋号登録ができる口座だと信頼度の観点から良いそうです。

短期的、または屋号が必要ない場合は住信SBIネット銀行がおすすめです
こちらは事業口座として利用できますし、手数料も安く無料範囲も必要十分
なによりも最短1営業日で口座が開設できるのでとてもスムーズです。

3. クラウド会計ソフトに登録する

これは2020年6月現在だと2択です。

長期的に使うことが確定していてバリバリ活動する場合はfreee
短期的で年間帳簿記載が50件以内であればマネーフォワードクラウドでOKです。

freeeは月額で1,100円ぐらいかかりますがめっちゃ使いやすいとのこと。

マネーフォワードクラウドは制限内であれば全部無料です
無料枠でも請求書発行ができますし、確定申告を作成するときだけ有料会員になれば1ヶ月分の金額で
確定申告が作成できるのでとても便利です。(1ヶ月無料体験可能なので最初は無料かもしれない)
※ 無料枠を超える利用がすでに確定してるならfreeeがいいです。

ちなみにですが、これは経費として落ちますので有料でもいいじゃんって気はします。
(でも短期間しかフリーランスしないのであるならば、無料枠利用が手間かからないです)

4. 開業届を出し、青色申告承認申請をする

開業届は個人事業主として働き始めた日から原則一ヶ月以内に提出する必要があります。

強制ではありませんが、開業届を出すことで青色申告承認申請ができ
ちょっと確定申告が手間になりますが大きく控除されるのでお得です。

まだ確定申告を出していないのでなんとも言えませんが
クラウド会計ソフトを使っていればそれほど手間にはならないみたいです。
(ただし、バリバリに活動している場合は除く)

なお、青色申告承認申請は開業から2ヶ月以内に提出する必要があります
開業届と一緒に申請してしまうというのがベターのようです。

また、これら2種類の申請書は事前に家で記載しコピーを含め2枚ずつ用意するのが良いです
税務署の印鑑をコピーした申請書に押してもらうことができます。(※ 銀行などの契約時に証明書として利用するらしい)
(税務署ではコピーしてくれないみたいで、税務署に印刷機がない場合があります)

5. マイナンバーカードを作成する

ICカードリーダーで読み込んで諸々の手続きをPCから行えたり
本人確認 + マイナンバー確認を一気にできるので手続きが楽です。

ちなみに、確定申告は電子申告で+10万の控除になるようです
青色申告の控除額が10万下がり、基礎控除が10万上がってるので、+10万控除されてお得です。

https://www.nta.go.jp/publication/pamph/shotoku/h32_kojogaku_change.pdf

やったほうがいいこと、覚えておくこと

  • 国保は入社した場合(労働者になった場合)にやめる手続きが必要。やめる月の支払いは必要ない、やめた翌月に差額支払いの紙が届く(例えば10月から入社の場合10月分の国保の支払いは差額の方を払う為必要ない。)
  • 確定申告に使った書類は原則7年保存する必要がある(記帳や帳簿等保存・青色申告|国税庁
  • 入社後、開業届を出していたり、青色申告承認申請をしている場合、これの取り消しも検討する(そのままでも問題ないが確定申告払いが無いけど大丈夫?みたいな通知が届くらしい)
  • プライベート口座から経費は落とさない、必ず事業用口座を使う(プライベート口座から落とした場合は→ フリーランスの経費は、すべて「事業主借」で処理する! | はじめての確定申告・青色申告 でできる?)
  • 売上を出すために必要なものは経費として落とせるので必ず落とす(所得 = 売上 - 経費なので節税になる)
  • 経費は必ず領収書をもらう(個人名を書いてもらう、自分で書くのはNG→無効になる可能性大。とはいえ書いてなくても問題ない場合が多いけど)
  • 家で働いている場合は光熱費の3割ぐらいは経費にできる(妥当性のある理由であれば3割以上も可…例えば自宅とは違う場所で働いていて8時間のみ業務する場合は10割にできると思う)
  • 確定申告を完璧に書ける人は税理士以外だと少ないらしい、明らかにおかしくなければ基本通ってしまうようです(後で明らかにおかしいと思われた場合は税務調査が入る)
  • 印鑑登録をする(一部の契約で使うかもしれない)
  • 廃業届を出すときは気をつける、廃業後は一定期間開業届を出せないらしい(青色申告申告の申請に制限があったかな?)とりあえずは就職することになっても開業してて問題ないが確定申告だしてないよみたいな通知は来るらしい。ここらへんは確認しておくと良いかも

Zoomでアバターを使う

アバター文化とリモートワーク

このリモートワークの時代、一部の界隈で流行ってるのが
アバターを使ってリモートワークをするということ。

一見ふざけている用に見えるが、メリットは多いのかなと思った。

  1. 部屋を見られなくてすむ(=個人情報漏洩防止)
  2. 着替えなくていい
  3. 身だしなみを整える必要がない(メイクなど)
  4. 恥ずかしさを抑えられる(≒ 顔出ししたくない)
  5. キャラ表現できる
  6. (かわいい女の子と仕事してる気分にできる)

もちろん、アバター文化はまだ理解が進んでいないところもあるので
こういった事はあくまでも許可が取れている範囲でやるべきだとは思います。

とはいえ、これだけのメリットが軽く出てくるので魅力的です。

Zoomでアバターを使ってみる

最近だとZoomが流行っているようなので
これをアバターを使って利用するにはどうすれば良いのか、書いていきます。

なお、Discodeなどのビデオ通話が可能なアプリであればおそらくどれでも同じことができます。

1. Zoomに会員登録をする

Zoomは一定の条件下では登録しなくても利用することができますが
まぁ、会員登録をしておいた方が今後の世の中何かと便利だとは思います。

手順に従って登録をしてください。

Sign Up - Zoom

2. Zoomアプリをインストールする

ブラウザ版もありますが、アプリをインストールしてしまいましょう。

ミーティング用Zoomクライアントをインストールしてください。

Download Center - Zoom

3. アバターを用意する

今回はVMagicMirrorを利用しますのでVRM形式のモデルデータを用意してください。

といったところでダウンロード可能です。(無料のもあります)

大抵の場合においてアバターには利用規約が存在します、Zoomで利用しても問題ないか必ず確認してください。  
また、FBX→VRM形式に変換することもできますがこちらも変換可能かしっかり確認してください。

今回は右近ちゃん+ゲーミングメガネを使います。

蛇足
FBX変換はUnityを利用します。過去記事が参考になるかも。

sleepost.hatenablog.com

4. OBSをインストールする

ちょっとややこしいのですが、OBSの画面を映像として利用するので
OBSをインストールする必要があります。(OBSで配信するわけではないです)

Open Broadcaster Software®️ | OBS

5. VMagicMirrorをインストールする

VRM形式のアバターを表示するアプリとしてVMagicMirrorを利用します。

VMagicMirror - 夢日記屋さん - BOOTH

他にも

といったアプリも利用できます。

6. 設定

1. VMagicMirrorでアバターを表示させる

まずはVMagicMirrorを起動してVRMアバターを読み込んでください
諸々の操作方法については公式サイトを参考にしてください。

VMagicMirror

2. OBSの設定をする

OBSを起動してください。

f:id:ploctio:20200606033931p:plain

  • 「ソース」からゲームキャプチャを追加(名前は任意)
  • 「特定のウィンドウをキャプチャ」→ウィンドウはVMagicMirrorを選択
  • 「カーソルをキャプチャ」のチェックを外す(任意)

(ちょっと、VRMの設定がおかしいのか表情が死んでますが)

ここまで確認できたら一度OBSを閉じ、仮想カメラプラグインを入れます
最新バージョンを入れれば問題ないかと思います。

Releases · CatxFish/obs-virtual-cam · GitHub

インストール後、OBSを起動してVirtualCamの設定をしてください。
(Startを押すと仮想カメラが有効になります。左右反転させたい場合は[Horizonal Flip]にチェックを入れる)

f:id:ploctio:20200606040034p:plain

Zoomミーティングでカメラの設定

Zoomアプリの設定からビデオ設定をして終わりです。

f:id:ploctio:20200606040938p:plain

参考