tag:crieit.net,2005:https://crieit.net/users/mFx7Po5kENbLe4t/feed 山田悠の投稿 - Crieit Crieitでユーザー山田悠による最近の投稿 2021-05-10T22:06:08+09:00 https://crieit.net/users/mFx7Po5kENbLe4t/feed tag:crieit.net,2005:PublicArticle/17083 2021-05-10T22:06:08+09:00 2021-05-10T22:06:08+09:00 https://crieit.net/posts/Web-60992fc0523c1 遅延ロードさせてWebアプリを高速化する <h1 id="遅延ロードとは"><a href="#%E9%81%85%E5%BB%B6%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A8%E3%81%AF">遅延ロードとは</a></h1> <p>基本的にwebアプリは表示するデータを読み込んでからページを表示します。<br /> しかしそれだと重いデータを取得・表示する場合、ページの表示速度が落ちて重たい動作になります。<br /> なので先に軽い部分だけを読み込みそのページに移動してから重いデータを読み込むことで<br /> すべてを表示するまでの時間は変わらない(むしろ少し落ちる)がページの移動速度を大幅に上げることができます。<br /> 体感上はかなりサクサクした動作になります。</p> <p>↓ツイッターの遅延ロード<br /> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/8197e1ec-d086-b08d-7b45-197e323945a8.png" alt="スクリーンショット 2021-05-10 192747.png" /></p> <h1 id="実装"><a href="#%E5%AE%9F%E8%A3%85">実装</a></h1> <pre><code class=":gemfile">gem 'render_async' </code></pre> <p>を書きbundle</p> <p>次にrenderを書き直します。</p> <p>変更前:</p> <p>```erb:index.html<br /> <%= render "data", posts:@posts %></p> <pre><code><br />これを ```erb:index.html <%= render_async data_path %> or <%= render_async data_user_path(@user) %> </code></pre> <p>このようにする。</p> <p>次にルーティング</p> <pre><code class="ruby:routes">get "data", to: "posts#data", as: "data" #↓パラメーターが必要な場合 get "data_user/:id", to: "posts#data_user", as: "data" </code></pre> <pre><code class="ruby:controller"> def index #@posts = Post.all end def data @posts = Post.all render partial: "data", locals: {posts:@posts} end def data_user @user = User.find_by(name: params[:id]) @posts = @user.posts.all render partial: "data_user", locals: {posts:@posts} end </code></pre> <p>最後はレイアウトに</p> <p>```erb:application.html.erb<br /> <%= content_for :render_async %></p> <pre><code><br />を追加。 これだけで遅延ロードが完成します。 ![スクリーンショット 2021-05-10 192747.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/e7e53d4b-7114-b09c-cf2e-a54ec754d08c.png) # turbolinksを使用している場合 このままだと時々表示されない場合があります。 </code></pre> <p><%= render_async data_path, html_options: { 'data-turbolinks-track': 'reload' } %></p> <pre><code>html_options: { 'data-turbolinks-track': 'reload' }を追加して config/initializersにrender_async.rbを作りましょう ```render_async.rb RenderAsync.configure do |config| config.turbolinks = true # Enable this option if you are using Turbolinks 5+ end </code></pre> <h1 id="jqueyを使う"><a href="#jquey%E3%82%92%E4%BD%BF%E3%81%86">jqueyを使う</a></h1> <p>kaminariやjscrollで無限スクロールなどを実装している場合、これをしないと動きません。</p> <p><code>config/initializers/render_async.rb RenderAsync.configure do |config| config.jquery = true end</code></p> <h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1> <p>遅延ロードって大きなサービスだと結構使われているのに日本語の情報が少なくて困ったので書きました。<br /> 体感上の動作速度がかなり変わるのでぜひやってみてください。</p> <h3 id="宣伝"><a href="#%E5%AE%A3%E4%BC%9D">宣伝</a></h3> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/99c8f13e-2fe8-0d28-1117-338115e937a0.png" alt="453789.png" /></p> <p><a target="_blank" rel="nofollow noopener" href="https://ammot.net/">https://ammot.net/</a></p> <p>AmmotというSNSを作りました。<br /> 文字数制限が6000字まで、画像・動画・PDF・音声は同時に10個まで投稿可能な自由なSNSです。<br /> マークダウンにも対応しているので皆さん大好きなソースコードもきれいに載せれます。<br /> ぜひ使ってみてください。</p> <p>僕のツイッターアカ<br /> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/yamada1531">https://twitter.com/yamada1531</a></p> 山田悠 tag:crieit.net,2005:PublicArticle/16845 2021-04-14T20:37:19+09:00 2021-04-14T20:37:19+09:00 https://crieit.net/posts/SNS-Ammot 制限の少ない自由なSNS ~Ammot~ <h1 id="初めに"><a href="#%E5%88%9D%E3%82%81%E3%81%AB">初めに</a></h1> <p>この度<a target="_blank" rel="nofollow noopener" href="https://ammot.net/">Ammot</a>というwebアプリを開発しました。<br /> 「制限の少ない自由な投稿を」がコンセプトで文字数が6000字まで、画像・動画・PDF・音声は同時に10個まで投稿可能です。<br /> 「ツイッターは文字数制限がきつい、ただfacebookは実名制だしデザインがごちゃごちゃでいや」<br /> という声を聴いたので作ってみました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://ammot.net/">https://ammot.net/</a></p> <p>qiitaのほうでも宣伝したのでよかったら見てください(ちょい違う内容です。)<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/UTOG/items/d5e6194aaa31b54e97c9">https://qiita.com/UTOG/items/d5e6194aaa31b54e97c9</a></p> <h1 id="どんなサービスか"><a href="#%E3%81%A9%E3%82%93%E3%81%AA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%8B">どんなサービスか</a></h1> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/48b63235-f2b6-ac69-bc72-8c61cd41d877.png" alt="453789.png" /></p> <p>↑これがログイン後のトップです。フォローしたユーザーの投稿がHOMEに流れて、<br /> サイドバーにはおすすめの投稿と現在人気のタグを表示しています。</p> <p>文字数制限が6000字まで、画像・動画・PDF・音声は同時に10個まで投稿可能です。</p> <p>先ほどサイドバーにおすすめを表示していると書きましたが<br /> 実はサイドバーはおすすめ機能などなくランダムで表示してるだけです。。。<br /> おすすめ機能(レコメンド)を実装できなかったというのもありますが、僕自身レコメンド機能が結構嫌いなんですよね。同じ、似たようなものばかり出てきて飽きてきますしたまには普段と全く違うものを見たい時もあるでしょう。<br /> だからタイムライン(home)には好きな投稿が流れるようになっていてサイドバーは完全ランダムにしました。</p> <h3 id="ツイッターのいやなとこ"><a href="#%E3%83%84%E3%82%A4%E3%83%83%E3%82%BF%E3%83%BC%E3%81%AE%E3%81%84%E3%82%84%E3%81%AA%E3%81%A8%E3%81%93">ツイッターのいやなとこ</a></h3> <p>文字数制限<br /> 編集ができない(個人的にめちゃ嫌)</p> <h3 id="facebookのいやなとこ"><a href="#facebook%E3%81%AE%E3%81%84%E3%82%84%E3%81%AA%E3%81%A8%E3%81%93">facebookのいやなとこ</a></h3> <p>制限はないがデザインがぐちゃぐちゃ<br /> 実名制はなんかいやだ</p> <p>この二つSNSの問題を解決するのがAmmotです。</p> <h1 id="工夫した点"><a href="#%E5%B7%A5%E5%A4%AB%E3%81%97%E3%81%9F%E7%82%B9">工夫した点</a></h1> <h4 id="無料プランにこだわった"><a href="#%E7%84%A1%E6%96%99%E3%83%97%E3%83%A9%E3%83%B3%E3%81%AB%E3%81%93%E3%81%A0%E3%82%8F%E3%81%A3%E3%81%9F">無料プランにこだわった</a></h4> <p>こういうものはバズらない限り、すぐには成功しません。使用者が全くいなくても1年は公開しようと思います。<br /> でも使用者がいないのに月数百円も取られるの馬鹿馬鹿しいじゃないですか。だからドメイン以外はすべて無料です。<br /> ただherokuの無料プランだとドメインを設定できないのでCloudflareを使い設定しました。</p> <p>参考記事:<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/serinuntius/items/f7f08b2221f5ad068f5d">https://qiita.com/serinuntius/items/f7f08b2221f5ad068f5d</a></p> <p>しかし、やはりSNSは速度が非常に重要なので少しだけ批判を受けました。自分はもう少しユーザーと投稿が増えてきたら有料のサーバーにしようと思います。</p> <h4 id="デザインとUIにこだわった(つもり)"><a href="#%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%A8UI%E3%81%AB%E3%81%93%E3%81%A0%E3%82%8F%E3%81%A3%E3%81%9F%EF%BC%88%E3%81%A4%E3%82%82%E3%82%8A%EF%BC%89">デザインとUIにこだわった(つもり)</a></h4> <p>フィットスクロール?だったり投稿画面のポップアップだったり<br /> 今まで使ってこなかった手法を使ってみました。<br /> 自己満になってるかもしれない</p> <p>ちなみにデザインを参考にしたサイトは<a target="_blank" rel="nofollow noopener" href="https://www.tumblr.com/">tumblr</a>です。<br /> 比べればまぁまぁ似てると思います。</p> <h4 id="機能性"><a href="#%E6%A9%9F%E8%83%BD%E6%80%A7">機能性</a></h4> <p>最初にも書きましたが画像・動画・PDF・音声の投稿とプレビュー機能を実装しました。<br /> これにはいろんな記事がありましたが</p> <p>まともに動きかつ一番簡単でコードもシンプルなこの記事を参考にするのをお勧めします。<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/0thefool/items/5af0f17f0075e7e0e013">https://qiita.com/0thefool/items/5af0f17f0075e7e0e013</a></p> <h4 id="マークダウン"><a href="#%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%80%E3%82%A6%E3%83%B3">マークダウン</a></h4> <p>他SNSとの差別化も含めマークダウンに対応しました。<br /> 文字の大きさやフォント?も自由に変えれます。</p> <h1 id="使用した技術"><a href="#%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%8A%80%E8%A1%93">使用した技術</a></h1> <p>rails6<br /> ruby2.7<br /> postgresql<br /> heroku free<br /> aws s3</p> <pre><code>gem 'ridgepole' gem 'slim-rails' gem 'html2slim' gem 'pry-rails' gem 'devise' gem 'kaminari' gem 'activeadmin' gem 'rack-attack' gem 'rails-i18n' gem 'devise-i18n' gem 'devise-i18n-views' gem 'carrierwave' gem 'rmagick' gem 'rinku' gem 'fog-aws' gem 'dotenv-rails' gem 'omniauth-google-oauth2' gem 'omniauth-rails_csrf_protection' gem 'redcarpet' gem "rouge" gem 'redis-rails' #一部抜いてます </code></pre> <h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1> <p>今回の開発は今までやらなかったことにめちゃ挑戦できたので楽しかったです<br /> 苦手なjquery・javascriptもプレビュー機能のおかげでちょっとわかった気がしてます。</p> <p>文字数制限や実名制で不便を感じたことのある人はぜひAmmot使ってください!お願いします。</p> <p>↓URL<br /> <a target="_blank" rel="nofollow noopener" href="https://ammot.net/">https://ammot.net/</a></p> <p>↓僕のAmmotのアカウント<br /> <a target="_blank" rel="nofollow noopener" href="https://ammot.net/user/yamada">https://ammot.net/user/yamada</a></p> <p>↓僕のツイッターのアカウント<br /> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/yamada1531">https://twitter.com/yamada1531</a></p> 山田悠 tag:crieit.net,2005:PublicArticle/16139 2020-10-18T18:32:30+09:00 2020-10-18T18:32:30+09:00 https://crieit.net/posts/51666379560ed175bbb7725cb5f01193 プログラムコードを販売できるサービスまとめ <p>今回はプログラムコードを販売できるサービスをまとめました。</p> <h2 id="code-sell"><a href="#code-sell">code-sell</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://www.code-sell.net/">code-sell</a><br /> <a href="https://crieit.now.sh/upload_images/58040fa19563696175b43776ee552c375f8c097ec198c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/58040fa19563696175b43776ee552c375f8c097ec198c.png?mw=700" alt="image" /></a><br /> 宣伝です...。僕が1週間くらい前に作ったサービスです。なるべく簡単に販売・購入できるようにしました。<br /> いま僕が今まで作ったwebアプリのコードをすべて無料で公開しています。</p> <h2 id="piecex"><a href="#piecex">piecex</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://piecex.com">piecex</a><br /> <a href="https://crieit.now.sh/upload_images/7ee158079f977ed09bd1f41679bf02bf5f8c09672c2d1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7ee158079f977ed09bd1f41679bf02bf5f8c09672c2d1.png?mw=700" alt="image" /></a><br /> おそらく一番メジャーで人気のあるサービスです。<br /> AIを搭載していて最適な価格がわかるそうです。</p> <h2 id="osadasoft"><a href="#osadasoft">osadasoft</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://www.osadasoft.com/support/source/">osadasoft</a><br /> コード一つ一つが高額です</p> <h3 id="補足"><a href="#%E8%A3%9C%E8%B6%B3">補足</a></h3> <p><a target="_blank" rel="nofollow noopener" href="https://www.source-gene.com/sg/top.do">sourcegene</a><br /> は登録ができませんでした。最新のコードも2018年なのでおそらくサービス終了しているんだと思います。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>今回はプログラムコードを販売できるサービスをまとめてみました。とりあえずいえるのは<br /> <a target="_blank" rel="nofollow noopener" href="https://www.code-sell.net/">code-sell</a>使ってください。</p> 山田悠