<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>takuyaのブログ</title>
<link>https://ameblo.jp/tky-106/</link>
<atom:link href="https://rssblog.ameba.jp/tky-106/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>Webアプリケーションの個人開発の始まりから終わりまでを発信しています！</description>
<language>ja</language>
<item>
<title>個人でサービス開発！11 ~開発~</title>
<description>
<![CDATA[ <p>前回は共通部分のフロント部分をある程度実装しました。続いて個別ページのフロントを形にしていきたいと思います！というわけで投稿画面を編集してみました。</p><p>ここではボタンを押すと投稿フォームが出てくる仕様にしてみます！</p><p>このボタンを押すと、、</p><p><a href="https://stat.ameba.jp/user_images/20200523/03/tky-106/8c/4f/p/o2880146414762775738.png"><img alt="" contenteditable="inherit" height="315" src="https://stat.ameba.jp/user_images/20200523/03/tky-106/8c/4f/p/o2880146414762775738.png" width="620"></a></p><p>こんなフォームが出てくる！デザインシンプルにしすぎたかもしれません笑</p><p><a href="https://stat.ameba.jp/user_images/20200523/03/tky-106/85/5d/p/o2880158414762775753.png"><img alt="" contenteditable="inherit" height="341" src="https://stat.ameba.jp/user_images/20200523/03/tky-106/85/5d/p/o2880158414762775753.png" width="620"></a></p><p>あまりフロント部分に時間をかけすぎるのも何なので、このフォーム形式は投稿のshow,index画面でも応用していこうかなと思います！</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12598860619.html</link>
<pubDate>Sat, 23 May 2020 03:11:42 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！⑩ ~開発~</title>
<description>
<![CDATA[ <p>さて、フロントサイドに入りました！</p><p>というわけでトップ画面と、それぞれ共通する部分のフロントを実装してみたのでご覧ください。テーマはわかりやすくシンプルに、かつオシャレにです笑</p><p>動画が載せられないのでわかりづらいですが、文字の背景には田舎や自然を連想させる画像を表示させていて、スクロールすると文字の部分の背景が移り変わります！</p><p><a href="https://stat.ameba.jp/user_images/20200518/02/tky-106/1d/db/p/o2880157614760421770.png"><img alt="" height="230" src="https://stat.ameba.jp/user_images/20200518/02/tky-106/1d/db/p/o2880157614760421770.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20200518/02/tky-106/03/aa/p/o2880158014760421683.png"><img alt="" height="230" src="https://stat.ameba.jp/user_images/20200518/02/tky-106/03/aa/p/o2880158014760421683.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20200518/02/tky-106/93/fc/p/o2880157614760421718.png"><img alt="" height="230" src="https://stat.ameba.jp/user_images/20200518/02/tky-106/93/fc/p/o2880157614760421718.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20200518/02/tky-106/0b/98/p/o2880157014760421758.png"><img alt="" height="229" src="https://stat.ameba.jp/user_images/20200518/02/tky-106/0b/98/p/o2880157014760421758.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20200518/02/tky-106/1d/db/p/o2880157614760421770.png"><img alt="" height="230" src="https://stat.ameba.jp/user_images/20200518/02/tky-106/1d/db/p/o2880157614760421770.png" width="420"></a></p><p>スクロールしてみた動画はツイッターの方に載せてます！</p><p><a href="https://twitter.com/TomTimTamTumTem">https://twitter.com/TomTimTamTumTem</a></p><p>&nbsp;</p><p>デザインの際にイメージしたのは、上部がサイバーエージェントのホームページで、下部はエアビーのホームページです。</p><p>これからもいろいろ付け加えていこうと思ってます！</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12597773674.html</link>
<pubDate>Mon, 18 May 2020 02:05:05 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！⑨ ~開発~</title>
<description>
<![CDATA[ <p>前回の続きで、次はトーク機能を実装しました。このサービスでは応募後に最終決断の前にグループでトークをしていろいろお話しできるという機能をつけようと思っていたからです。</p><p>&nbsp;</p><p>このトーク機能を実装するにあたって厄介だったのは、トーク機能にまたユーザーと投稿をむすびつけなくてはならないという点です。</p><p>その前に、まずは以下のようにルーティングでpostにネストしてビューを作成する。</p><p>ここでは検索機能のためにsearchもネストしてある。</p><p><a href="https://stat.ameba.jp/user_images/20200518/01/tky-106/36/97/p/o0946074014760419556.png"><img alt="" contenteditable="inherit" height="329" src="https://stat.ameba.jp/user_images/20200518/01/tky-106/36/97/p/o0946074014760419556.png" width="420"></a></p><p>そして次にモデルにアソシエーションを記述。<a href="https://stat.ameba.jp/user_images/20200518/01/tky-106/08/0e/p/o0948024414760419594.png"><img alt="" height="108" src="https://stat.ameba.jp/user_images/20200518/01/tky-106/08/0e/p/o0948024414760419594.png" width="420"></a></p><p>user_id はspeaker_idとして使用。</p><p>これであとはビューにsimple_fomでデータを送る仕組みを記述し、show画面でコメントを表示させるよう実装した。一通りアプリを作り終えたらjsで非同期通信を実装する予定です。</p><p>&nbsp;</p><p>少し駆け足で、検索機能も追加しました！</p><p>こちらは特に難しいことはなく、以下のようにコントローラーとビューに記述して実装しました。ビューのlocal: trueによって同画面での検索結果表示が容易にできるようになっています。</p><p><a href="https://stat.ameba.jp/user_images/20200518/01/tky-106/ef/96/p/o1540058214760420616.png"><img alt="" height="159" src="https://stat.ameba.jp/user_images/20200518/01/tky-106/ef/96/p/o1540058214760420616.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20200518/01/tky-106/33/eb/p/o1120137814760420634.png"><img alt="" height="517" src="https://stat.ameba.jp/user_images/20200518/01/tky-106/33/eb/p/o1120137814760420634.png" width="420"></a></p><p>あとは投稿削除時の関連カラム削除の記述や日本語翻訳のgemを使ってファイルを生成するなど微調整をして、とりあえずサーバーサイドは完了です！</p><p>次からはフロントを実装して見栄えを良くしていきます。</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12597773070.html</link>
<pubDate>Mon, 18 May 2020 01:54:30 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！⑨ ~開発~</title>
<description>
<![CDATA[ <p>前回から早速次の実装に入ろうとしたのですが、ある過ちに気づきました、、笑</p><p>このアプリでは応募後にユーザー同士がチャットできる場を設けようと考えていて、</p><p>投稿と応募者を結びつける中間テーブルを作ってないと別テーブルのレコードの呼び出しが後々できない、、というわけでしっかりやり直します！</p><p>&nbsp;</p><p>まずpostとuserをつなぐ中間テーブルを作成し、カラムにはpost_id,user_idを入れます。そしてPostsUser,User,Postモデルに必要なアソシエーションを記入して行きます。</p><p>Post</p><p><a href="https://stat.ameba.jp/user_images/20200515/03/tky-106/f3/2a/p/o1356038214758873796.png"><img alt="" height="118" src="https://stat.ameba.jp/user_images/20200515/03/tky-106/f3/2a/p/o1356038214758873796.png" width="420"></a></p><p>User</p><p><a href="https://stat.ameba.jp/user_images/20200515/03/tky-106/72/9e/p/o1656064014758873815.png"><img alt="" height="162" src="https://stat.ameba.jp/user_images/20200515/03/tky-106/72/9e/p/o1656064014758873815.png" width="420"></a></p><p>PostsUser</p><p><a href="https://stat.ameba.jp/user_images/20200515/03/tky-106/24/45/p/o1382028214758873826.png"><img alt="" height="86" src="https://stat.ameba.jp/user_images/20200515/03/tky-106/24/45/p/o1382028214758873826.png" width="420"></a></p><p>コメントアウトが多いのは試行錯誤の証です。笑</p><p>アソシエーションを記述するにあたって特に考えたのは、Userモデルです。このアプリではユーザーは投稿と応募というアクションを起こすことができるので、投稿をする際にユーザーと投稿を結びつけるidと、応募をする際にユーザーと投稿を結びつけるidが必要になるわけです。そこで前者をcontributor_idとしてpostsテーブルのカラムに追加し、後者をapplicant_idとして中間テーブルに追加することにしました。その際、同じユーザーモデルで外部キーを分散させるために、class_nameという手法を使いました。accepts_nested_attributes_forはデータの更新、削除などをまとめて行ってくれるものですが、記述はまだ曖昧なので後で修正します。そしてここまで終えたらあとはコントローラーで処理します。</p><p><a href="https://stat.ameba.jp/user_images/20200515/03/tky-106/6d/64/p/o2512146814758874477.png"><img alt="" contenteditable="inherit" height="362" src="https://stat.ameba.jp/user_images/20200515/03/tky-106/6d/64/p/o2512146814758874477.png" width="620"></a></p><p>投稿がそのままグループのような役割を果たすような仕組みにするため、ストロングパラメーターに配列の形で応募者のidを空の状態で入れておきます。さらに応募ボタンを押した際にuppdate_applyアクションが働くようにし、そこで先ほど説明した応募者idにログインユーザーのidを入れてやることで中間テーブル内のpost_idも連動してデータが入り、いつでもレコードの取り出しが可能となりました。</p><p>&nbsp;</p><p>というわけで今度こそようやく募集と応募機能ができました。これからは今までよりも少しスムーズに進むと思われるので気持ち楽にやっていこうと思います！</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12597106198.html</link>
<pubDate>Fri, 15 May 2020 03:57:38 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！⑧ ~開発~</title>
<description>
<![CDATA[ <p>それでは続きです！</p><p>前回応募機能をつけようとして、応募した先の投稿にapplicant_idを結びつける作業の途中でエラーが出ました。正直ここはものすごく悩みました、、、</p><p>結果わかったことは、動いているアクションが思っていたのと違う、ということです。応募ボタンは、下のようにpostsコントローラーのshowアクションで表示させていましたが、この応募ボタンを押した際にshowアクションではなくupdateアクションだったということ。</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20200513/23/tky-106/38/12/p/o1086064414758315080.png"><img alt="" contenteditable="inherit" height="249" src="https://stat.ameba.jp/user_images/20200513/23/tky-106/38/12/p/o1086064414758315080.png" width="420"></a></p><p>冷静に考えればshowのmethodはあくまでGETなのだから当然ではあるのですが、、</p><p>とにかくbyebugというデバック方法で気づくことができました。ちなみにapplicant_idはrailsのupdateメソッドを使って既存のnilのカラムにデータを入れてやる形で紐づけるのですが、updateアクションは投稿編集の際に動かしたいので、別アクション、ルーティングを作りupdateメソッドをそれぞれのアクションで働かせることにします。ということで新たにupdate_applyアクションを作り、下のように記述しました。</p><p><a href="https://stat.ameba.jp/user_images/20200513/23/tky-106/96/d9/p/o1386014814758317604.png"><img alt="" contenteditable="inherit" height="66" src="https://stat.ameba.jp/user_images/20200513/23/tky-106/96/d9/p/o1386014814758317604.png" width="620"></a></p><p>ついでに投稿者とログイン中ユーザーが同一の場合applicant_idは入らないようにしておきました。</p><p>&nbsp;</p><p>こうして無事、応募機能を完成させることができました！</p><p>投稿機能、応募機能をまとめると、current_user.idをストロングパラメーターでcontributor_idとしてマージすることで投稿作成時に募集側ユーザーが紐付き、ストロングパラメーターでapplicant_idを許可し、かつviewのformで表示させずにデータを送らないことでnilをカラムに入れ、updateメソッドでそのカラムに応募時のcurrent_user.idを入れてやることで応募側ユーザーが投稿に紐づくという仕組みです。<a href="https://stat.ameba.jp/user_images/20200513/23/tky-106/04/64/p/o2492145014758321025.png"><img alt="" contenteditable="inherit" height="361" src="https://stat.ameba.jp/user_images/20200513/23/tky-106/04/64/p/o2492145014758321025.png" width="620"></a></p><p>最後に編集、応募に関して不正を働けない仕組みを少し足しておきました。</p><p>次は応募後の動きの仕組みを作っていこうかなと思います！！</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12596862062.html</link>
<pubDate>Wed, 13 May 2020 23:51:10 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！⑦ ~開発~</title>
<description>
<![CDATA[ <p>ひとまずユーザーが投稿して編集、削除できる機能までは実装しました！</p><p>以下一覧画面</p><p><br><a href="https://stat.ameba.jp/user_images/20200511/22/tky-106/fb/d7/p/o1259153514757336715.png"><img alt="" height="512" src="https://stat.ameba.jp/user_images/20200511/22/tky-106/fb/d7/p/o1259153514757336715.png" width="420"></a></p><p>以下詳細画面</p><p><a href="https://stat.ameba.jp/user_images/20200511/22/tky-106/d7/10/p/o0933080414757336760.png"><img alt="" contenteditable="inherit" height="328" src="https://stat.ameba.jp/user_images/20200511/22/tky-106/d7/10/p/o0933080414757336760.png" width="380"></a></p><p>cssないのでひどく殺風景ですが、こんな感じですね！</p><p>次は応募の機能をつけていきます→思ったより複雑で苦戦、、</p><p>募集者と応募者が存在するということでuserをcontributor_idとapplicant_idにわけて、postsテーブルに追加しました。今まで存在していたuser_idを、募集者を意味するcontributor_idに変更したわけです。</p><p>&nbsp;</p><p>ここから僕がやりたいことは、ログイン中のユーザーと新規投稿の紐付け（既にuser_idで絡めていたものをcontributor_idに変えるだけ）と、他人の投稿に対して応募した際にpostsテーブル（投稿）のapplicant_id（応募ID）とログイン中のユーザーのcurrent_user.idを紐付けるという作業。</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20200512/01/tky-106/19/35/p/o2762112114757406901.png"><img alt="" contenteditable="inherit" height="500" src="https://stat.ameba.jp/user_images/20200512/01/tky-106/19/35/p/o2762112114757406901.png" width="1235"></a></p><p>&nbsp;</p><p>このようにして、下のposts_paramsを使ってcreateアクションで空のapplicant_idを送ってやり、showアクションの応募ボタンを押したタイミングで空のapplicant_idカラムにcurrent_user.idを入れてやることで紐付けをする！</p><p>⬇︎</p><p>そして応募ボタンを押すと、、</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20200512/01/tky-106/39/df/p/o2872127614757407485.png"><img alt="" contenteditable="inherit" height="276" src="https://stat.ameba.jp/user_images/20200512/01/tky-106/39/df/p/o2872127614757407485.png" width="620"></a></p><p>エラーが。笑</p><p>しかしデータベースを見るとapplicant_idにはちゃんと値が入っている、、</p><p>そうそう上手くいかないものです！次回このエラーを解決します</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12596435624.html</link>
<pubDate>Tue, 12 May 2020 01:52:38 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！⑥ ~開発~</title>
<description>
<![CDATA[ <p>さて開発を進めているのですが、やはり今回bootstrapは使用しないことにしました！というのも初めてbootstrapを勉強してみて、あまりに便利すぎると感じてしまったからです、、笑　便利さとはロジック部分が既に構築されているということであってあまり勉強にはならないし、何より既に構成されているロジックをみんなが使用することでフロント部分が一定のデザインに収束されてしまうという一面をもつと僕は考えています。というわけで多少大変ですがsassを使って一から作っていこうかなと！</p><p>&nbsp;</p><p>とりあえず簡単な仕組みの部分から作っていきます！</p><p>ホーム画面、投稿画面、投稿一覧画面、詳細画面、編集画面を作り、実際に投稿をしてそれを一覧に表示させ、編集を行うところまでザッと実装してみる。</p><p>&nbsp;</p><p>次にユーザー登録機能を作るためにdeviseを導入したのですが、なぜかマイグレーションエラー。ridgepoleを使っているためmigration関係ないのでは？と思ったのですが、ridgepoleを使うが故にdevise導入時、少し変更が必要だったみたいです！</p><p>deviseのモデル導入と同時にmigrationファイルが生成されるのですが、その内容のcreate_table以下の部分をそっくりそのままridgepoleで使うschemaファイルに写してやらなければなりません。そりゃそうですよね。笑　</p><p>&nbsp;</p><p>その後不要になったマイグレーションファイルを削除して、サーバー再起動して、無事導入完了！</p><p>&nbsp;</p><p>というわけでこれからサインアップ、サインインなど登録機能を追加して、ユーザー情報と投稿をむすびつけていこうと思います！</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12596062717.html</link>
<pubDate>Sun, 10 May 2020 16:21:15 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！⑤ ~開発~</title>
<description>
<![CDATA[ <p>前回までの手順でデータベース作成まで終わりました！エラーだらけで大変でしたが、、　次にモデルとコントローラーを作成→難なくクリア</p><p>早速rails sでサーバー起動させようとしたら、エラー。</p><p>&nbsp;</p><p><b>&nbsp;Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /Users/tky/projects/match_hike/config/webpacker.yml (</b><b>RuntimeError</b><b>)</b></p><p>&nbsp;</p><p><b>webpacker?聞いたこともないですね。言われた通りインストールしましょう。</b></p><p>rails webpacker:install　すると、エラー。</p><p>&nbsp;</p><p>Yarn not installed. Please download and install Yarn&nbsp;</p><p>インストールしましょう。</p><p>brew install yarn</p><p>というわけで再度rails webpacker:installして成功！</p><p>&nbsp;</p><p>無事、rails s でサーバー起動することができました。</p><p>&nbsp;</p><p>というわけでrouting,view,controllerに少し記載して、ようやく白紙のページが表示されるに至りました。ここからガンガンコードを書いていこうと思います！！</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12595680475.html</link>
<pubDate>Sat, 09 May 2020 00:29:56 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！④ ~開発~</title>
<description>
<![CDATA[ <p>前回の続きで、今度はmysqlのエラーでしたね！</p><p>An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.</p><p>これに関しては下の順に実行して.bundle/configにBUNDLE_BUILD__MYSQL2: "--with-ldflags=-L/usr/local/opt/openssl/lib"を生成してあげれば解決です！</p><p>&nbsp;</p><p><code>$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include"</code></p><p><code>$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"</code></p><p>&nbsp;</p><p><code>これで無事bundle installできました！</code></p><p>というわけでデータベース作成していきましょう。gemファイルにridgepoleを追加してbundle installする。→schemaファイルにテーブルとカラムの詳細を記入→</p><p>rails db:createでデータベースの基盤を作成する→</p><p>bundle exec ridgepole -c config/database.yml -E development --apply -f db/Schemafileを実行してschemaファイルの記入内容を反映させる。</p><p>とりあえずデータベース作成は成功しました。これからコントローラーやモデル、ルーティング等整えていきます！</p><p>&nbsp;</p><p>&nbsp;</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12595671908.html</link>
<pubDate>Fri, 08 May 2020 23:40:51 +0900</pubDate>
</item>
<item>
<title>個人でサービス開発！③　~開発~</title>
<description>
<![CDATA[ <p>では早速開発を始めていきます！</p><p>オプションをつけてアプリケーションをrailsのバージョン6.0.2.1で作成。</p><p>ここでこんなエラー。笑</p><p>&nbsp;</p><p>`find_spec_for_exe': <b>can't find gem railties (= 6.0.2.1) with executable rails (</b><b>Gem::GemNotFoundException</b><b>)</b></p><p>&nbsp;</p><p><b>調べるとこのバージョンのrailsをインストールしていないとのことなので</b></p><p>gem install rails -v 6.0.2.1</p><p>実行後、無事アプリ作成できる。</p><p>今回はmigrationファイルの大量生産を防ぐためにridgepoleというgemを使い、rails db:migrateの代わりとなるrails db:applyを実行。ここでエラー。笑</p><p>&nbsp;</p><p>Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib</p><p>&nbsp;</p><p>記事にあったbrew update &amp;&amp; brew upgrade実行しても変わらず。どうやら以前インストールしたopensslが問題ぽい、、</p><p>一度rbenv uninstall 2.5.1（rubyのversion）して　rbenv install 2.5.1することでopensslが再構築されるとのことなので実行→成功</p><p>では改めてrails db:applyを実行。しかしエラー。</p><p>&nbsp;</p><p>The `rails' command exists in these Ruby versions:</p><p>&nbsp; 2.5.3</p><p>&nbsp;</p><p>bundle installしてみると、似たようなエラー。</p><p>&nbsp;</p><p>The `bundle' command exists in these Ruby versions:</p><p>&nbsp; 2.5.3</p><p>&nbsp;</p><p>どうやらGemfile.lockとのバージョンの違いが原因らしいが、ここで大きくつまづいたのだが、Gemfile.lockのbundlerのバージョンを確認するときはbundlerではなく必ずBUNDLED WITH をみること！</p><p>そしてgem install bundler -v 2.0.2を実行し、無事bundle install成功、と思いきや今度は</p><p>&nbsp;</p><p>An error occurred while installing mysql2 (0.5.2)</p><p>&nbsp;</p><p>mysqlが問題らしい、、ここはまた別問題なので次に紹介する。</p><p>まだコードを書けてないが、ここを山場と思い頑張ろう。笑</p>
]]>
</description>
<link>https://ameblo.jp/tky-106/entry-12595203093.html</link>
<pubDate>Thu, 07 May 2020 01:03:29 +0900</pubDate>
</item>
</channel>
</rss>
