読者です 読者をやめる 読者になる 読者になる

ネオキャリアグループ開発者ブログ

ネオキャリアグループの技術者による開発ブログ

見習いエンジニアの挑戦道!~自己紹介編~

 

Hello World! 

 

はじめまして、

17新卒の平野です。

 

入社して間もない私ですが、読んでいただいている人に

少しでも会社の情報などを発信していけたらと、

ブログを更新していきますのでよろしくお願いします。

 

 

  

自己紹介

 

改めまして 平野です。

花粉症・猫アレルギー(猫は大好きです!)

その他もろもろで マスク生活な私ですが、

ここでは、簡単に自己紹介をさせていただきます。

 

基本データ

 

誕生日:12月24日

出身地:さいたま市

 

好きなこと

 

・スマートフォン ゲームアプリ

・野球、スキー...(スポーツ全般)

・釣り  and more...

 

インドア・アウトドアどちらも大好きです。

 

大学で学んできたこと

 

・UX (=User Experience)

・Ad Technology について研究・学会発表をしていました。

 (生意気に全部英語で書いてみました。なんか強そうですよね。)

 

こんな感じで、自己紹介は終わらせていただきます。

 

私とネオキャリア

 

さて、ここからは私がネオキャリアで体験してきたことを

入社前(インターンシップ)と入社後に分けて紹介させていただきます。

 

入社前(インターンシップ)

 

私はこれまでに3回、ネオキャリアの短期インターンシップにお世話になりました。

 

WINTER INTERNSHIP -GUSH- (2日間)

「極限まで思考し続けることで、脳から汗が噴出する2日間のビジネスバトルフィールド」

 

2015年冬。このインターンがネオキャリアとの最初の出会いでした。

 

ネオキャリアの4年間を2日間に凝縮したコンテンツで、

文字通り、朝から晩まで脳から汗が出るほど考え込みました。

  

SPRING INTERNSHIP -DIVE-(1ヶ月)

最初、冬のインターンに参加した私はなめていました。

「冬同様、それなりに結果をだすか...」と。

(これから訪れる過酷な1ヶ月を彼はまだ知らなかったのです...)

 

「夏」「冬」の集大成でもある「春」のインターンは、

今までの机上の空論ではなく、

実際にチームでビジネスを創出し利益を生み出すという未経験のものでした。 

(最終的には、就活イベントを開催し利益を生み出しました。)

 

最終日は、1ヶ月の成果を社長に向けてプレゼンをするという

とても緊張する場でしたが、メンバーやお客さんに恵まれ、

チームで優勝することができました。

(その後、チームで学生団体を立ち上げ就活イベントを開催していました。)

 

今思い返しても、この1ヶ月はとても大変でした。

 

エンジニアインターンシップ(1日)

こちらは、今まで紹介してきた総合職向けのインターンではなく

エンジニア向けのインターンシップです。

 

「はじめてのWeb」ということで、初歩的なことから優しく教えていただきました!

インターンで学んだことは今でも、時々読み返しています。

 

 

以上が 私がインターンを通して ”ネオキャリア” を体験したことでした。

 

 

各インターンについての説明はこちらをご覧ください。

(エンジニアのインターンは見つかりませんでした...!申し訳ありあません...)

shinsotsu-watch.com

(どこかに私が写っていることは内緒です。)

 

 

入社後

 

現在、私はネオキャリアグループのエンジニアとして働いております!

(散々、総合職向けのインターンのお話をしてきましたが...)

 

これからは、入社後に体験したイベントをご紹介したいところですが、

入社して間もない私なので、直近のお話をしようかと思います。

 

ネオキャリアグループの2017新卒

4月3日に行われた入社式で晴れてネオキャリアグループの社員になれたわけですが、

総合職含め、なんと… 330名弱の同期がいます!

 

 圧巻ですよね...。もちろん、私もこの中にいます!

 

 

事業部の上半期総会

詳細は割愛させていただきますが、

振り返りと今後に向けてのお話を聞きました。

 

その後は、 会場が「浅草花やしき」ということで

食事をしたり、童心に戻りアトラクションに乗ったりと楽しんでいました。

f:id:ryuji1224:20170428160355j:plain

  

 

以上、私がこれまでにネオキャリアで体験してきたことです。 

 

 

終わりに

 

なぜ、私がファーストキャリアをネオキャリアに決めたのか。

それは ”成長したい” からです。

ネオキャリアには ”成長できる” 環境が整っています。

 

すこし訂正します。

”成長しなければいけない” 環境が整っているのです。

 

研修中は多くのことをインプットし、自分のものにしていく。

そして、少しでもアウトプットの機会を増やせるよう頑張っていきます。

 

 

今回はこの辺で終わらせていただきます。

 

 

弊社について

弊社ではエンジニアの募集を行っております。
ぜひ募集記事をチェックして頂けると嬉しいです!


www.wantedly.com


www.wantedly.com

新卒見習いエンジニアぐっちです。

 

こんにちは!ネオキャリア開発部2017年新卒のぐっちです!

 入社してまだ間もないですが、新卒紹介ということでブログを

書かせていただきます!

 

開発に関する知識などは、まだ人に語れるほど持ち合わせていないので、

今回は、

 

1、今までの僕のエンジニアとしての歩み

2、ネオキャリアの研修について

 

上記二つについてお話させていただきます(๑╹ω╹๑ )

 

エンジニアとしての歩み

きっかけ

 元々僕は、大学では建築学を専攻していました。

なのですが、建築に対して全く興味が持てませんでした(笑)

 

設計図を書いていても何も心踊らず、

ただただ無心で、建物の絵を描き続けるということをしていました。

 

「これが将来の仕事になるのか〜」

ということを考えたら絶望感しかありませんでした(笑)

 

そんな中で、あるインターンに参加させていただいた際に、

プログラミングに触らしていただける機会がありました。

 

そのときに今まで自分が何気無く触っていたアプリやソフトウェアを

自分が一から作ってるんだ!というわくわくした気持ちと、

 

その裏で、様々なロジックが動いて、一つの製品として成り立っているという

ことを知り、

 

元々、ものづくりと物事を論理的に考えることが好きだった僕は、

プログラミングってすっごく楽しい!!

と感じたのが、エンジニア人生の第一歩目でした。

f:id:kabutomusi8:20170427021258j:plain

 

エンジニアになるために

 そのインターンをきっかけにして、僕はエンジニアになることを決めました。

しかし、全くの知識0なので、とりあえず何か学ばなければいけない。

 

 

 そのときは、アプリ開発にすごい興味があったので、iOSアプリを勉強しました。

言語はSwiftで、

 

初めは、変数に値を代入して出力

Hello World!

から始まり、

 

様々なコンポーネントを使って、アプリっぽいことができたり(当たり前ですが。)

意味のわからないエラーで二日間とまったりと

 

初心者が経験する楽しくもイライラする時を過ごし、

 

 

三ヶ月後にはなんとかアプリを一つ作るところまでできました。

まあほんと残念なアプリなんですけどね。笑

 

ちなみにAppleStoreに公開はしてません。笑

 

f:id:kabutomusi8:20170427021623j:plain

 

そしてそのあとはWebサイトも作ってみたいなと思い、

HTML,CSS,Ruby,Ruby on Railsを勉強しました。

 

railsでは、pryを乱用しながらエラーと戦ってました。

 

Swiftは、railsのpryのようなことを、ワンクリックでできたので、

めんどくさかったです。笑

 

そして、自分が読んだ本と他人が読んだ本を交換できる

CtoCのWebサービスを作りことができた上に、

 今回はWebサイトをしっかりとサーバー上に公開することができました!

 

 

初めてちゃんとしたものを作って公開したので、本当に嬉しかったです!!!

今はもうサーバー止めてなくなってしまったんですけどね。笑

f:id:kabutomusi8:20170427021426p:plain

 

 

そして、今!

ご縁があってネオキャリアのエンジニアとしてただいま研修を受けさせてもらってます!

 

ネオキャリアの研修について

 内定者研修

内定をいただいた後には、まず入社する前に内定者研修として、

新卒のメンバー5人で、

「位置情報を使ったアプリを作る」という課題が渡されました!

 

僕はもっぱら開発よりのことをさせてもらって、

 

まずRuby on Railsで初めてAPIを作ったり、

そのあとで、SwiftでiOS開発したり、

途中で自分のAPIが残念なので、

結局、GoogleのFirebase使ったりと本当に自由にやらせてもらってました。笑

 

 

すごく楽しかったです!!!

 

そして、この研修で思ったのが、プログラミングは開発しているときが、一番知識の吸収力が高く、定着もしやすいと思います!

 

もしも、プログラミングを始めようかなと思っている人がいたら、

本を読んだり話を聞くだけじゃなく、

実際にコードを書いてください!そして自分の作りたいものを作ってみてください!

 

そうすれば、その楽しさゆえ知識も頭にたくさん入ってきます!!

 

 

そして、この研修のおかげで同期のみんなとすごく仲良くなれたと思ってます!

ぶつかり合うこともあったけど、それだけ本音で言い合える関係になれたことは

本当に良かったと思います!

 

現在

今は新卒研修として以下のことをやってます!

 1、TOEIC800点を目指すための勉強

 2、開発に関する様々なInput(本や講義)

 3、テストコードの書き方の練習

 4、チーム開発

 

ざっくりとそれぞれを解説しようかなと思います!

 

1、TOEIC800点を目指す勉強

なぜ800点なのかというところなんですけど、これはエンジニア界隈では、有名な

Q&Aサイトでstack overflowというサイトがあるんですが、

ここに投稿、回答、閲覧できるのが約800点だと言われています。

他にも、ライブラリやAPIのドキュメントなんかは英語で書かれていることが多いので、

エンジニアとして英語は必須のスキルなんです!

 

2、開発に関する様々なInput

これは、言わずもがなですが、

エンジニアとは勉強し続けなければならない職業です。

新しい技術が次々と出てくるので、常に勉強する姿勢というのが大切です。

経験が浅い僕は、基礎知識自体も全然足りていないので、実践に入る前にしっかりと知識を蓄え、そして常に勉強する姿勢を維持できるように

今は、無限に与えられる課題図書をひたすら読み続けています!

 

3、テストコードの書き方の練習

入社した当初はテストコードなんているの?

なんて思っていた僕ですが、 テストはものすごく重要です。

これをしっかり行っていないと、バグによって開発者のライフスタイルは、

強制的に、明石家さんま状態になります(不眠不休)

しかも全然笑えません。

 

逆にテストをしっかり行えば、

バグは出にくくなり、たとえ出たとしても修正しやすい

コードになっているので、バグの発見がしやすいです。

 

もちろんテストをしてもバグは0にはなりませんし、一概に

修正しやすいコードになるとも言えないのですが、

やらなかったら本当に大変なことになります。笑

 

なので僕らもしっかりとテストコードについて勉強しています!

 

4、チーム開発

最後はチーム開発です。

今回は社内で利用する図書管理システムを作っております。

スクラムというアジャイル開発手法を使いながらプロジェクト

を進めていて、

ここでは、実践を通してスクラム、要件定義、プログラミングetcを学んでいます!

実践に入れられた時に困らないように鍛えているわけです!!

 

長くなりましたが、以上が僕らのやっている研修です!

 

少しでも面白そうだなと思ったら是非、下のリンクからチェックしてみてください!

以上ぐっちでした!

 

弊社について

弊社ではエンジニアの募集を行っております。
ぜひ募集記事をチェックして頂けると嬉しいです!


www.wantedly.com


www.wantedly.com

 

 

 

 

新人ようたの冒険:コーディング規約チェックツールでプルリク村に平穏を取り戻す編

こんにちは!こんばんは!
16新卒のよう太です。

最近、某タラレバ娘を見るたび恐怖感に襲われます。

今回は RailsBestPractices についてまとめてみました。
FactoryGirlは一回休みです( ー`дー´)

f:id:Yoko_Takaki:20170228123109j:plain

続きを読む

EditorConfigでコーディングルールの統一

こんにちはエンジニアの松崎です。
早速ですが皆さんチーム内で同じエディターを使われていますか?

  • SublimeText
  • Atom
  • Vim
  • IntelliJ IDEA

その他様々なエディターをチーム内でバラバラに使用していることが多いと思います。
またエディターだけでなく
「htmlのインデントはタブで( +・`ω・)b」
「cssのインデントはスペースで( ・`ω・´)」
のようにそれぞれの自分ルールが存在していて、新しく入った人は間違えるだけで怒られることも… ( ̄ー ̄;

続きを読む

Bitbucket Pipelinesでとりあえずユニットテストを動かす

元ネタはこちらです。

Bitbucket pilelinesって?

Atlassian製のCIツールです。 BitbucketへのアクションをトリガーとしてDockerコンテナ上でタスクを実行してくれます。 当然ながらBitbucketをリポジトリとして利用していないと意味ないです。

元々の悩み

  • Bitbucketでプルリク送ったけど、これテスト通ってんの?とかいちいち確認したくない
  • developにマージしてから確認だとプルリク閉じちゃっている場合あるし、そもそもテスト通ってからプルリク送れや( ゚д゚ )とか荒ぶることになってしまう。

やりたいこと

タイトルの通り、Bitbucket Pilelines使ってbranchへpushした時にユニットテストを動かしてしまおう作戦

問題

  • push単位だとジョブが割と頻繁に動作してしまう → とりあえずpipelinesは今の所タダだし良いか( ´∀`)

設定

Bitbucket Pipelinesを開始するには、まず以下の手順で有効にする必要があります。

リポジトリの設定 > PIPELINESのSettings > Enable Pipelinesをクリック

これで有効になるので、プロジェクトのルートにbitbucket-pipelines.ymlを設置することでタスクを実行させることが出来ます。

続きを読む

新人よう太の冒険: FactoryGirlとティータイム編

こんにちは、こんばんは!
16新卒のよう太です。

先日、マッチングアプリを起動したら、リストに知り合いがいてびびりました。

さて、今回は 「もっと!FactoryGirlをテーマに、

  • 連番のデータ
  • リアルなダミーデータ
  • 関連モデルのテストデータ

以上3種類のテストデータをモリモリ作っていこうと思います。

f:id:Yoko_Takaki:20170130115810j:plain

FactoryGirlの導入方法や、基本的な使い方に関しては
こちらの記事を見ていただけると嬉しいです⊱ฅ•ω•ฅ⊰

新人よう太の冒険: FactoryGirlとの出会い ~序章~

続きを読む

ガード句でRubyの防御力を上げる!初めてのContract

「じゃあここのメソッドに引数を渡して実行して…」
「よし!完璧に動いてる!」
「ついでにコメントを書いておこう!」

後日… 「ここのメソッドは[@params String]の型が入って動作するから」
「String型を渡して……」
「エラー…._| ̄|○」

数日後… 「この前のコードコメントが間違えてて違う型だった!(〇*>∀<)ゞ★☆」

「えっ….」
「えっ?….」
f:id:daiki-matsuzaki:20170127122147j:plain

こんにちは!冒頭からすみませんw。
ギリギリ新卒エンジニアの松崎です。
前回のこの記事以来になります。

neo-developers.hatenablog.com

今回紹介するのはRubyで型を縛る方法です!
(phperの方はごめんなさい!)

〜 読んでいただきたい人 〜

  • ジェンガコードに怯えている方
  • 人とコミュニケーションが取りづらい方
  • 人の入れ替わりが激しいプロジェクトにいる方
  • 適当なコメントやコメントが無い事に悩まされる方
  • エンジニアの皆さん

目次

型を縛る??とは

今回はRubyのgem Contractsを使用します。
このgemは「メソッドの引数と戻り値が、ある条件を満たしているかをチェック」できるものです。

github.com

使用方法

インストール

まずはgemfileに記述します。

gemfile

gem 'contracts'

ファイルへの記述

Contractsをclassやmoduleにincludeします。

sample.rb

class Sample
  include Contracts

これで使用できる準備ができました!

簡単な使用例

さっそく例に移ります! まずは成功例からです。

class MyCalculate
  include Contracts

  Contract Num, Num => Num
  def self.add(a, b)
    a + b
  end
end

puts MyCalculate.add(1, 1)

解説です。 MyCalculateClassのaddメソッドの引数として2つの引数Numeric型を指定して出力しています。

Contractsの設定は
1.MyCalculateClassのaddメソッドの引数が 2つともNumeric型 であること
2.MyCalculateClassのaddメソッドの戻り値が Numeric型 であること

を確認しています。 ここでは問題なく成功したのでなにもおこりません。

こちらは失敗例です。

class MyCalculate
  include Contracts

  Contract Num, Num => Num
  def self.add(a, b)
    a + b
  end
end

puts MyCalculate.add(1, "good!!")

解説です。
MyCalculateClassのaddメソッドの引数として Numeric型・String型を指定して出力しています。

先ほどと同様でContractの設定は
1.MyCalculateClassのaddメソッドの引数が 2つともNumeric型であること
2.MyCalculateClassのaddメソッドの戻り値が Numeric型であること

を確認しています。

しかしNumeric型を期待していたのにString型が指定されました。
そのため、これを実行すると以下のように例外が発生します。

./contracts.rb:4:in `failure_callback': Contract violation: (RuntimeError)
    Expected: Num,
    Actual: "good!!"
    Value guarded in: Object::add
    With Contract: Num, Num    

解説です。
1.Expected: Numで期待(予想)している引数はNumeric型であることがわかります。
2.Actual: "good!!"で実際に引数で指定した値を出力しています。

Numeric型が来るはずなのに値がNumeric型じゃ無いですよ!と出力されています。

値の型チェック

例1)
Contract String => nil
def greet(name)
  puts "hello, #{name}!"
end

解説です。
Contractsの設定は
1.greetメソッドの引数がString型であること
2.greetメソッドの戻り値がnilであること
を確認しています。

先ほどと違うところはメソッドの戻り値が何もない場合、nilを指定できるところです。

例2)
Contract ArrayOf[Num] => Num
def count_total_numbers(nums)
  nums.inject(:+)
end

解説です。
Contractsの設定は
1.count_total_numbersメソッドの引数が Array型で配列の中は Numeric型 はあること
2.count_total_numbersメソッドの戻り値が Numeric型であること

を確認しています。

この場合、配列の中まで確認することができます。
成功 count_total_numbers([1, 2, 3, 4]

失敗 count_total_numbers([1, 2, 3, "foo"])

そのほか、Contractsに標準で組み込まれている様々な型チェックが使用できます。
実際に業務でContractsを使用した際に、頻出した型チェック(のリスト)です。

確認できる型
Bool 真偽値(true or false)をチェックできます。
Or 型の条件が2つ存在する場合にどちらか一方の型をチェックできます。
HashOf Hash型の時に使用します。例)HashOf[Symbol,String] Hash値の中の型まで見ることができます。
Maybe 型にnilが来る場合に使用します。 Or[String,nil]と同じ意味です。
Any 型を見ずに何かしらの値が来ていることをチェックできます。
例えばHashが入れ子になりすぎている状態だと長すぎて邪魔なためAnyで省略したり
rubyでは最後に評価した値が戻り値になるので
引数や戻り値を見る必要がない場合などに使います。

もっと詳しい情報はこちらのリファレンスページに記載されています。

自作のContracts

型自体が標準で組み込まれていない、開発者側が定義した型が存在する場合
自分で型チェックを作ります!σ゚ロ゚)σ

Contractの標準で組み込まれているメソッドはこのようになっています。

class Num
  def self.valid? val
    val.is_a? Numeric
  end
end

解説です。

classメソッドにvalid?をつけることによってバリデーションを使用します。
引数で渡ってきた値をis_a?メソッドで型の判定をしています。

標準メソッドを応用して新たにチェックするメソッドを作成します。
railsのlibディレクトリの中にCustomContractsディレクトリを作成し
CustomContracts配下にUserファイルを作成しました。

module CustomContracts
  class User
    def self.valid? val
      val.is_a?(::User)
    end
  end
end  

呼び出し

Contracts CustomContracts::User => String

解説です。
基本的に標準メソッドと同じですがここでチェックしている型は
User(UserClass)型です。
呼び出し側はクラスメソッドになっているのでCustomContracts::User
で呼び出せます。

is_a?(::User)is_a?(User)にしてしまうとCustomContractsのUserクラス
を見てしまうのでこのようにしています。

最後に

最後までご覧いただきありがとうございます!

実際にContractsをプロジェクトに導入すると
メソッドの引数に制限が加えられたので、想定していない型で引数が
セットされることがなくなりました。
つまり、型の不一致によるバグを事前に防ぐことが出来ます!

皆さんも是非使ってみてはいかがでしょうか?

弊社について

ネオキャリアでは、エンジニアの募集を行っています。
ぜひ!募集記事をチェックしていただけると嬉しいです!(*>ω<)b

www.wantedly.com

www.wantedly.com

参考サイト

Contracts.ruby by egonSchiele

こちらの記事は、Qiitaに投稿したものと同じ内容になっています。

ガード句でRubyの防御力を上げる!gem Contract - Qiita