Doiya’s blog

日々の進捗を書く雑記ブログ(メインはエンジニアやプログラミング関連)

今回の案件で学んだことを振り返る記事

今、関わっている案件絡みでJavaの勉強をしているのですが、その時に色々と学んだので 振り返りも兼ねて、いくつかピックアップして記事を書くことにしました。

今回、具体例はRubyでコードを記載しようと思います。

変数

変数とはプログラム内でデータを保存するための箱というイメージです。 まずは以下のように変数名を宣言して、そこから各々の値を代入します。

# 文字列型の変数nameを宣言し、値を代入する
name = "Alice"
puts name  # 出力: Alice

# 整数型の変数ageを宣言し、値を代入する
age = 30
puts age  # 出力: 30

データ型一覧

データ型とは、変数に格納するデータの種類を定めたものです。

Rubyでは以下のデータ型があります。

1 文字列型(String)
 文字の連続したシーケンスを表すデータ型です。ダブルクォート(")またはシングルクォート(')で囲まれた文字列を表現します。

2 数値型(Numeric):

2-1 整数型(Integer)
整数値を表すデータ型です。正の整数、負の整数、ゼロを含みます。

2-2 浮動小数点数型(Float):
小数点を含む数値を表すデータ型です。

3 論理型(Boolean)
 真(true)または偽(false)の値を表すデータ型です。条件判断や制御フローに使用されます。

4 配列型(Array)
複数の要素を順序付けて格納するデータ型です。要素はインデックスによってアクセスされます。

5 ハッシュ型(Hash)
キーと値のペアを格納するデータ型です。キーは一意であり、値に対応します。ハッシュは連想配列や辞書として使用されます。

6 シンボル型(Symbol)
一意の名前を表すデータ型です。シンボルは文字列と似ていますが、メモリ効率が高く、不変(immutable)であるため、主にキーとして使用されます。

7 範囲型(Range)
連続した値の範囲を表すデータ型です。開始値と終了値を指定して作成します。

8 正規表現型(Regexp)
パターンマッチングを行うためのデータ型です。文字列のパターンを表現するために使用されます。

9 オブジェクト型(Object)
すべてのデータ型の親であり、Rubyのクラス階層の基礎となるデータ型です。

ちなみにRubyは動的型付け言語であるため、変数には異なるデータ型の値を代入することができます。また、Rubyのクラスシステムを活用することで、ユーザー独自のデータ型を定義することも可能です。

配列

配列とは、プログラミングにおいて複数の値を一つの変数にまとめて格納するためのデータ構造です。配列は、同じデータ型の要素を連続的に格納することができます。要素は順序を持ち、通常は0から始まるインデックスでアクセスされます。

# 配列の作成と要素のアクセス
fruits = ["apple", "banana", "orange"]
puts fruits[0]  # 出力: apple
#上記の【0】の部分がインデックス(添字)の部分。

# 要素の変更
fruits[1] = "grape"
puts fruits  # 出力: ["apple", "grape", "orange"]

# 要素の追加
fruits.push("kiwi")
puts fruits  # 出力: ["apple", "grape", "orange", "kiwi"]

# 要素の削除
fruits.delete("orange")
puts fruits  # 出力: ["apple", "grape", "kiwi"]

# 配列の長さ
puts fruits.length  # 出力: 3

# 配列の反復処理
fruits.each do |fruit|
  puts fruit
end
# 出力:
# apple
# grape
# kiwi

オブジェクト指向

まずオブジェクトとは簡単にいうとプログラミングの世界でいう「もの」のことをいいます。

オブジェクト指向プログラミングは、現実世界の物事や概念をプログラムの中でモデル化する方法です。 イメージとしては、実際の物体や事物をプログラム上に再現し、それらが相互作用する様子を表現することです。

以下、「犬(Dog)」というクラスを用いて具体例を出して説明するつもりなのですが まず、いくつかの用語の解説をします。

クラス

クラスとはオブジェクトを作成するための設計図です。

犬の特徴や振る舞いを定義します。

インスタンス

クラスを基に作成される実体です。犬のインスタンスを作成するときは、クラスの設計図に基づいて作成します。

属性

クラスの特徴や状態を表すデータです。例えば、犬の名前、年齢、品種などが属性として表現されます。

メソッド

クラスが持つ操作や振る舞いを表す関数のようなものです。 例えば、犬が吠える(bark)や眠る(sleep)といった行動がメソッドとして定義されます。

では具体例を表示します。

class Dog
  # 特徴(属性)
  attr_accessor :name, :age, :breed


  #メソッド(振る舞い)
  def bark
    puts "Woof woof!"
  end

  def sleep
    puts "Zzzz..."
  end
end

# インスタンスの作成
my_dog = Dog.new

# 属性の設定
my_dog.name = "Max"
my_dog.age = 3
my_dog.breed = "Labrador Retriever"

# メソッド(振る舞い)の実行
my_dog.bark  # 出力: Woof woof!
my_dog.sleep  # 出力: Zzzz...

補足

attr_accessorは 「同名のインスタンス変数を戻り値とするメソッドを定義する」と「同名のインスタンス変数へ代入するメソッドを定義する」の両方を行うメソッドです。

「my_dog.name」などの.(ドット)の部分はアクセスすると表現しても良いかもしれないです。

引数

引数とは関数やメソッドに渡される値や変数のことを指します。 関数やメソッドは、特定の処理を行うために必要な情報を引数として受け取ります。

以下、具体例

def greet(name)
  puts "Hello, #{name}!"
end

greet("Alice")  # 引数として文字列"Alice"を渡す
greet("Bob")    # 引数として文字列"Bob"を渡す

今回でいうと、(name)の部分と("Alice")、("Bob")の部分が引数にあたります。 ちなみに(name)の部分は仮引数といい("Alice")、("Bob")の部分は実引数といいます。

この二つの違いは仮引数は関数やメソッドの定義側で宣言され、引数のデータ型や名前を表します。一方、実引数は関数やメソッドの呼び出し側で具体的な値を指定します。仮引数と実引数の間で値が渡され、関数やメソッドが実行される際に使用されます。

今回は以上で終えようと思います。また記事を書くことがあるかもしれないので、その際はよろしくお願いします。

参考

Javaマスターへの道: ステップ4 – 変数とデータ型の理解 | ramble - ランブル -

札幌オフラインもくもく会開催しました!!

4/30に札幌でRUNTEQ関連の人たちとオフラインもくもく会をしました!!

感想をベラベラと書くのでよければ見てください。

なぜやろうとしたのか

色々理由はあるのですが、1番の理由は色々あってモチベーションが下がってきたということですかね。

以前関西でオフラインもくもく会を開いたことがあったのですが、その時にモチベが爆上がりしたので 「もしかしたら、この北海道でやっても面白いかも」と思ってやった次第です。

詳細は以下を参照

doiya.hateblo.jp

今回意識したこと

前回やった時に、気合を入れすぎてめちゃくちゃ手の込んだのをやったんですよね。 結果こちらも良いもくもく会になったのですが 一つだけ、後悔したことがありまして

当日、緊張しすぎて全く楽しめなかったことです。

なので今回は、「ゆるくてもいいから自分も楽しもう!!」というのは意識しましたね。

今回は参加者の一人の発案で前日に1名を除いて、みんなで札幌を観光したんですよね。 そこで色々とお話ができたのであまり緊張せずに取り組めました。

すごい楽しかったですよ。

参加人数

今回は9名でした。他のもくもく会と比べると結構少人数だったと思うのですが そのおかげで密に全員と話ができたりコミュニケーションが取れたのでは ないかと思っています。

唯一企画したこと

お悩み相談会というのを企画したんですよ。

どう言うものかというと

一人一人の悩みや質問したい事を発表して、その悩みをみんなで考える。

というものをやりました。

なぜやったのか理由は二つあります。

その1

参加者がほとんど現役エンジニアだったから

今回、参加者が9人いて、そのうち7名が現役エンジニアだったんですよwww しかも中々つよつよだったり、カリスマ性のある人もいらっしゃったので

「これはもくもく会だけじゃもったいねえ!!」

と思ったから。

その2

RUNTEQ生2名のため

逆をいうと、ほとんどがエンジニアの所にポツンとRUNTEQ生が混ざると めちゃくちゃ緊張されるかもと思ったので

「何かエンジニアの皆さんと接点を持ってもらって、来て良かったと思ってほしい。」

と言う思いはあった。(伝わってるかな??)

実際やってみた感想ですが、一言で言うと

めちゃくちゃ良かった!!

とにかくエンジニアの方が多いから、レベルの高い話や深い話ができましたね。 非常に良い意見交換会になったと自分は思いました。

またエンジニアの皆さんが僕の気持ちを察してか、特にRUNTEQ生2名に各々の考えを伝えてくれている感じがすごいしたので 非常に有意義なものになったと思います。

最後に

参加者には伝えたのですが、今回自分一人で企画した感じがあまりしませんでした。

理由は色々な所で僕のことをサポートしてくれたからです。

確かに基本的な部分は自分が一通り考えましたが 例えば以下の事柄ですね。

29日にみんなで観光をしようと言ってくれた方

打ち上げ会場を自分に紹介してくれた方

もくもく会の昼食のテイクアウトのお寿司を注文して取りに行ってくれた方

自分が、札幌の土地勘があまりないので道案内をしてくれた方

会場のセッティングやゴミの事などを細かな事をフォローしてくれた方

お悩み相談会で色々と意見を出してくれた方々
etc

参加者の皆さんの協力があったからこそ、素晴らしい二日間になったと思っています。

なのでこのもくもく会は参加メンバー9名全員で作り上げたもくもく回だと思っています。

諺で「3人寄れば文殊の知恵」というのがあるじゃないですか。

3人いただけでもすごいのに、9人も案を出し合えばそりゃあクオリティの高いモノが できるに決まってますよ!!

本当に良いもくもく会が出来て主催として嬉しい限りです。

もしかしたら、またいつかやるかもしれない。

参考

三人寄れば文殊の知恵(さんにんよればもんじゅのちえ)とは? 意味や使い方 - コトバンク

公式ドキュメントで見る上で注意したほうがいい事

大した内容ではないけど、自分のログ残しで記載しますね。

事象

今、Udemyである言語を勉強しているのですが なぜか思い通りにいかなくて沼った。

結論

違うバージョンの公式ドキュメントを確認してたから

あとがき

Udemyなどで勉強すると 作られた当時と現在では違うバージョンであることも 普通に起こり得ると思うので注意が必要ですよね。 当たり前な話かもしれないけど 実際、自分はそこで沼ってしまったので記事にしました。

2022年の振り返り

本当に大さっぱやけど、今年の振り返りをします。

主に今年、自分の中で重要だったエピソードを記載してみます。

2022年3月 会社を辞めてフルコミットになる。

それまでは働きながらでやってたけど、色々あって会社を辞める決断をした。 今振り返ってもこの決断がなければ、おそらくエンジニアにはなれてなかった気がする。

2022年4月 輪読会する。

仲のいいRUNTEQのメンバーを集めて

2冊の書籍をみんなで進めて勉強するというのを3~4ヶ月かけてやったんですよ。

ここでみんなで話し合いながら勉強したので、定着率は一人でやった時より

良かった気がします。

2022年5月 くそアプリWeek参加

ゴールデンウィーク期間中に1週間で自分のサービスを作ったんですよ。 この経験を通して

「MVPまでなら、1週間でサービスを作れるんだな」というのを この時に実感できてよかったなと思ってます。

2022年6月 関西オフラインもくもく会企画した。

RUNTEQ生活で自分のことを 一番褒めたいことがあるとするなら

間違いなくこれです!

謙遜抜きで言わせていただくと、現在関西でコンスタントにオフラインもくもく会やっとるんですよ。

これの一番最初に主催したの私なんですよ。なのでこの文化のキッカケを作ったのは間違いなく自分だと自負しています。

ここは自分に対して誇りを持ってもいいのかなと考えています。

2022年7月~2022年9月 ハッカソン参加

今年の東京の都知事杯に参加したんですよ。結果は予選落ちでしたけど そこで初めてチーム開発を経験して この時はいい経験させてもらいましたよ。

特に実装部分は2日でMVPまで仕上げたので本当にすごいことをしたなと思ってます。 これはチームメンバーに感謝ですね。

2022年8月 現職に内定

まさか一発で面接通るとは思わなかったな。多少なりとも準備はしたけど

昔、面接で最下位をとったことがあるので、こうなることは予想外でしたね。

2022年10月 エンジニアデビュー

正直、これと言ってまだ語れることがないんですよね💧

ただ、RUNTEQにはかなりお世話になったのでRUNTEQ出身の方しか見れない

コミュケーションツールがありまして、そこに「今週の振り返り」と名づけて自分が経験したことを なるべく本音ベースで週に1回記載するようにしてます。 まあ、半分日記みたいなもんですけどね。

2022年11月 ブラック職場LT会登壇

ここで自分の過去に経験したブラック企業の話をさせてもらったんですよ。 正直かなり重い空気にしてしまったので罪悪感を感じ取るんですけど 話させてもらったおかげで、自分の過去のトラウマが浄化できた気がします。 これは企画していただいた方には感謝しかないですね。

2022年12月 原体験ドリブンをしてもらう。

先述で述べたチーム開発メンバーに「自分の歴史」を 赤裸々に語らせてもらったんですよ。 例えば「嬉しかったこと」「悲しかったこと」「やりがいに感じたこと」とかね。 そこで自分という人間をあらためて再認識できたので良かったなと思っております。

以上です。皆さん今年も1年ありがとうございました。

良いお年を。

エンジニアになって1ヶ月の振り返り

10月からエンジニアになってちょうど1ヶ月が経ったので 振り返りをしようと思います。

注意

なるべくマイナスなことは書かないように意識しますが リアルを書きたいので、多少ネガティブな記載をするかもしれません。 その点だけご了承ください。

エンジニアになって良かったこと

出社すれば人に教えてもらえる。

ここはでかいかなと思う。スクールの頃は質問するにも 言語化するのにも一苦労した。 ただ、現職が未経験採用を積極的に行っているためか かなり下手な質問しても優しく返答してくださった。 これは非常にありがたいと感じた。

また出社すると、多少なりとも人間関係を形成できるので 個人的に未経験からエンジニアを目指す方は

出社とリモートを併用できる会社に行くことをお勧めしたい。

自由な雰囲気がある。

これは言語化するのが非常に難しいのだが なぜそう思ったのか箇条書きで列挙したい。

・リモートと出社を自由に選んで良い。(案件次第で変わるかも)
・オフィスで勤務中に普通にみんな雑談している。
・ランチ会のような交流の場がある。
・フレックスタイム制
(コアタイムはあるが、うまく時間調整をすると遅めに出社してかなり早めに退社することができる。)
・比較的、話しやすい人が多い。

注 もう一つご了承いただきたい事があるのですが あくまで私は現職しかエンジニアを経験していないので、全ての会社がこうであるかどうか分からないので 「あくまで自分の会社はこうである」 というつもりで記載したので その点だけご了承いただきますと幸いです。

苦労したこと

研修のカリキュラムが難しい

私はかなり苦労した。正直あまりにできなくて何度かかなり落ち込んだ😅

おまけに同期の中でダントツで進捗が遅れていたので

相当焦った。ただここは自分の中でしくじったことがあるので 後ほど後述したい。

同期がすごい

もうね。本当にすごいの。 みんな、言語能力が高いし、自分の意見持ってるし おまけに性格がひん曲がっているわけでもない。

ただこれは当たり前だなと思っている。 なぜならば、現職は比較的に良い会社であり エンジニアになった人は皆さん人間的魅力の良い人が多い。 そりゃあ、良い人材が増えるわけなので その分、苦労するのは必然だと思われる。

「良い会社には良い会社だからこその苦労がある。」 と私は思う。

しくじったこと

質問を中々しなかった。(というより出来なかった。)

最初の頃、なかなか質問できなかった。 理由は以下の通り

・質問の内容を言語化できない。
・皆さんお忙しそうだと思った。
・自分の実力のなさに失望されたくなかった。

ただし、このせいで大幅に進捗が遅れたので 最終的に先輩に泣きついた😭

このことを反省して 今後は

「時間をかけて完璧な答えを目指す」

のではなく

「自分の中で及第点の出来で提出してトライアンドエラーでやってみる。」

「わからないことはなるべき早めに先輩にSOSを投げる。」

上記のことを意識したい。

とはいえ、何でもかんでも質問して良いわけではないと思うので 今後は以下の記事を参考にしたい。

qiita.com

エンジニアになれるまでのスキルがない。

正直、私は全然プログラミングの実力がないのです。スキル面も本当に大したことないので エンジニアになるまでまだまだ下積みが必要だったのではないかとすら考えてます。

皆さんは私のようになってほしくないので 以下のことを意識してプログラミングに取り組まれることを強くオススメします。

・コピペをなるべく控えて、自分で考えてコードを書く。
・自分が書いたコードを口で説明できるようにする。
・上手い人のコードを見てみる。

上記を意識されるといいと思います。

例えば

以下のサービスでローカルでアプリを作ってみて

追加でオリジナル機能を一つ考えて実装してみる。

とか良いと思います。

www.techpit.jp

あと、以下のサイトはPFの集約サイトなのですが ここにGithubソースコードを載せている方がいるので それを参照するのも良いかもしれません。

fledge-hub.com

色々書きましたが最後に言いたいことが一つあります。

エンジニアに転職することはゴールではなくスタートである!!

本当にこのことは忘れないでほしい。未経験からのエンジニア転職って相当大変なのは百も承知なのですが

(おまけに自分のような30代未経験からエンジニアになるのなんて尚更大変である。)

エンジニアになっても、勉強することもたくさんあるし 僕みたいに同期が優秀すぎて劣等感を感じたりすることもあると思うし 結構、エンジニアになっても大変な事って多いんですよね。

そのため、モチベーションを維持するためにも

「これからが本当にスタートなんだ!!」

と思えばまだ頑張れる気がするんですよね。

兎にも角にも、山あり谷ありの1ヶ月でしたが 今後もなんとか頑張っていきます🙇‍♂️

ps

1つ書き忘れたことがあるので追記します。

他人と比べない術を身につけよう!

めちゃくちゃ大事。私ね。これができなくて 2回も心折れたんだよね💧

比べるのは自分自身!

これは意識した方がいいと思うな。

外部キー制約に絡んだエラーが出た。

HerokuにデプロイしたPFで自分の掲示板の一つを削除しようとしたらエラーが発生した。

どう対処したか??

まず以下のコマンドでHerokuのエラーの確認。

heroku logs --tail

そしたら以下のエラーを検知した。

validForeignKey (PG::ForeignKeyViolation: ERROR:  update or delete on table "boards" violates foreign key constraint on table "bookmarks"

どうやら外部キー制約に違反をしているらしい。

外部キー制約とは

簡単に説明すると、

「他のテーブルのデータに参照(依存)するようにカラムにつける制約」 という意味である。

掲示板を削除したらブックマークも消えるけど大丈夫??」 と記載されている感じだと思われる。

そのために掲示板のモデル部分に以下のコマンドを追加した。

board.rb

has_many :bookmarks, dependent: :destroy

dependent:destroyの役割

関連付けられたオブジェクトも同時にdestroyされる。

今回で言うと、掲示板を削除すればブックマークも削除できるようにした。

上記のことをして、エラーを解決させた。

参考

Herokuでのエラーログ確認方法 - Qiita

削除できない原因は外部キー制約だった。

Vue.js デプロイ時にエラーが出た。

Vue.jsで作ったアプリをHerokuにデプロイした時にエラーが出たので、ログ残しも兼ねて記事を書きます。

経緯

以下のエラーがデプロイ時に出た。

Build failed
        
We're sorry this build is failing! You can troubleshoot common issues here:
https://devcenter.heroku.com/articles/troubleshooting-node-deploys
       
Some possible problems:
   
 - Node version not specified in package.json 
 #上記の部分でエラーが出た。
https://devcenter.heroku.com/articles/nodejs-support#specifying-a-node-js-version

意味としてはpackage.jsonにnodeのバージョンを記載していないということである。

そのためpackage.jsonに以下の文を追記

 "engines": {
    "node": "16.x",
    "npm": "8.x"
  },

記載した後にデプロイしたが、別のエラーが出た。

Please update to v0.35.0 or higher for TypeScript version: 4.7.4
src/pages/PlayPage.vue(13,3): error TS1184: Modifiers cannot appear here.

Build failed
  
We're sorry this build is failing! You can troubleshoot common issues here:
https://devcenter.heroku.com/articles/troubleshooting-node-deploys
     
If you're stuck, please submit a ticket so we can help:
https://help.heroku.com/

色々調べた結果、今回は以下の部分が原因だと判明した。

Please update to v0.35.0 or higher for TypeScript version: 4.7.4
src/pages/PlayPage.vue(13,3): error TS1184: Modifiers cannot appear here.

その部分を確認したら、確かに以下の部分でエラーが出ていた。 src/pages/PlayPage.vue

export type PLAY_STATUS = typeof PLAY_STATUS[keyof typeof PLAY_STATUS];

原因としてはModifiers cannot appear here.と記載しているように

どうやらexportという修飾子はここでは使えないみたいなので

exportを消してみた。

その後、package-lock.jsonを更新するために 以下のコードを打った後に再度デプロイした。

npm run bulid

そのようにしたら、無事デプロイできた。

以上

参考

Heroku環境でReactアプリのビルドに失敗する(Node version not specified in package.json)原因はNodeのバージョン違いでした - Qiita

Node.js のデプロイのトラブルシューティング | Heroku Dev Center

Typescriptをplaygroundで遊びながら理解した記事 - Qiita