ヘッダーに配置する項目
個人開発しているサービスのヘッダー改修のため、いくつかのサービスのヘッダーに配置されている項目をまとめました。
- サービスロゴ
- 検索フォーム
- プロフィール画像
- ユーザー名
- ホームリンク
- フレンド
- メッセージ
- お知らせ
- ヘルプ
- 設定
- ホームリンク
- モーメント
- お知らせ
- メッセージ
- サービスロゴ
- 検索フォーム
- プロフィール画像
- 設定
- ツイートボタン
Github
- サービスロゴ
- 検索フォーム
- Pull requests
- Issues
- Marketplace
- Gist
- お知らせ
- 新規作成
- プロフィール画像
- 設定
まとめ
ベーシックなヘッダーのサンプル
- サービスロゴ
- 検索フォーム
- お知らせ
- 新規作成
- プロフィール画像
- 設定
Railsでいいね機能
個人開発しているサービスにいいねボタンをつけるためのメモ。
イメージ
- 親テーブル
- posts
- comments
- 子テーブル
- likes
投稿にもコメントにも「いいね」できるようにしたい。
課題
親テーブルが複数ある時にテーブル設計をどうするか。
参考: 複数のテーブルに対して多対一で紐づくテーブルの設計アプローチ|日本橋のシステム開発会社|スパイスファクトリー株式会社
アプローチ方法
- ポリモーフィック関連
- 複数の関連テーブル(中間テーブル)
- 親テーブルの作成
- テーブルの分割
どれを選択するか。悩んだのでSQLアンチパターンを買って読みました。
- 作者: Bill Karwin,和田卓人,和田省二,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (45件) を見る
合わせてmastodonも参考にしました。 mastodonでは、ポリモーフィック関連を採用しているようでした。
create_table "notifications", id: :serial, force: :cascade do |t| t.integer "account_id" t.bigint "activity_id" t.string "activity_type" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "from_account_id" t.index ["account_id", "activity_id", "activity_type"], name: "account_activity", unique: true t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type" end
なるべくRailsに沿ってつくりたかったので、今回はmastodonを参考にPolymorphicで実装することにしました。
実装
命名については、ableを語基の後ろに付けるものと抽象名詞を使うものとがあるようでした。
参考:Rails ポリモーフィック関連の関連名の命名 - 130単位
このあと通知機能の実装も検討していて、そこでもpolymorphicを使用する可能性があったので、汎用性が高い抽象名詞を利用することにしました。
$ rails g model like activity:references{polymorphic}:index user:references
class CreateLikes < ActiveRecord::Migration[5.0] def change create_table :likes do |t| t.references :activity, polymorphic: true t.references :user, foreign_key: true t.timestamps end end end
$ rake db:migrate
class Like < ActiveRecord::Base belongs_to :activity, polymorphic: true belongs_to :user validates :user_id, uniqueness: { scope: [:activity_type, :activity_id] } end class Post < ActiveRecord::Base has_many :likes, as: :activity end class Comment < ActiveRecord::Base has_many :likes, as: :activity end
参考
フリーランス4年目の2017年前半振り返り
個人開発
いくつか個人開発でサービスをつくりました。最低限の機能のみですが、もやもやっとしたアイデアから機能を検討して開発を行いリリースするまでのプロセスに慣れることができました。一方で、リリースしたところである程度満足してしまい「さあどうしようか」となったところで、次のサービスの開発に移り、サービスのほとんどが自己満足で終わって使ってもらえない状態でした。その反省から、2017年の後半はプロダクトの成長方法の学習をひとつのテーマに置いてみたいと思います。
情報収集
世界を知りたい、特に先進国の現状を知りたいと思い、ヨーロッパを一周しました。街がどんなつくりか、地下鉄にどうやって乗るか、スーパーでは何が売っているかなど、気になることを見てまわりました。2017年の後半は、まだ行ったことのない日本の地方都市に行きたいと考えています。
業務委託
お世話になっている会社で週2~3日ほど常駐で開発に参加させていただいています。上長が優秀な方で、エンジニアが働きやすく開発に集中できる環境をつくっていただいています。開発に関しては、やりたいことが決まっていて、それ以降をまるっと任せていただいている状態なので、今後の課題として設計から実装まで個人レベルの底上げがあります。
その他
株式投資・仮想通貨・人工知能といった分野にも経験・研究のため取り組んでみました。株式投資は合わなかったためか、ほとんど放置している状態です。その他の2つについては、サービスを利用したりAPIを使って簡単に動くものをつくってみたりしている状態です。今後は、寄り道をしてもう少し趣味の範囲に落とし込み開発を楽しめる方法を考えてみたいと思います。
Rails5(Turbolinks5)でGoogle Analyticsを設置
Rails5(Turbolinks5)の環境でGoogle Analyticsを設置した時のメモ。
Turbolinks Compatibilityに掲載されている情報に古さが出てきていたので他の方法を調べていたところ、turbolinksのissuesで同じテーマのやりとりを見つけたのでこちらを参考にしました。
参考:Google analytics best practice? #73
<head> ... <% if Rails.env.production? %> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga("create", "UA-XXXXX-Y", "auto"); </script> <% end %> </head>
document.addEventListener "turbolinks:load", (event) -> if typeof ga is "function" ga("set", "location", event.data.url) ga("send", "pageview")
AdSenseのissueは下記のリンクに上がっています。
参考
DEPRECATION WARNING: alias_method_chain is deprecated
Rails5で作業中に下記のWARNINGが表示されました。
DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super.
alias_method_chainが使用されているgemを調べます。
まずgemのインストール先を確認。
$ gem environment
インストール先のディレクトリに移動してalias_method_chainでgrepをかける。
$ grep -lir alias_method_chain ./
該当するgemを発見。
githubのリポジトリでchangelogを見たらfixされていたのでgemをアップデート。
WARNINGが表示されなくなったことを確認できました。
参考
Amazon EC2にSFTPで接続
Amazon EC2に「FTPで接続したい」と言われた時のメモ。
作業ユーザーを作成
$ sudo useradd hoge $ sudo passwd hoge
$ sudo visudo
hoge ALL=(ALL) ALL
鍵の作成
$ sudo su - hoge $ mkdir ~/.ssh $ ssh-keygen -t rsa $ mv id_rsa.pub authorized_keys $ chmod 600 authorized_keys $ chmod 700 ~/.ssh
秘密鍵を適当な名前でローカルに保存。
確認
接続を確認
ssh -i hoge.pem hoge@xx.xxx.xx.xx
書き込み権限を許可
sudo chmod o+w /var/www/html/huga
その他
エラー:Permissions 0644 for ‘hoge.pem’ are too open.
$ chmod 0600 hoge.pem