HANDAI JK Engineering Blog

HANDAI JKの技術ブログです

GitHubを使ってるならついでにCIを回しちゃおう

HANDAI JKの石田です。

大阪は先日ひさびさの雨でした。傘をもっていなかったのでびしょびしょです。今日は、CI(Continuous Integration)の話をしたいと思います。

こんなことってありませんか

あれ、いつのまにかコードが動かなくなってる!!!

ありますよね。コードを改良していくうちに、動いていたところが動かなくなっている。そんな時は問題が発生したコミットを一生懸命さぐるわけですが... CIを実施していればこのようなことは起こりません。

CIとは

CIとはContinuous Integration(継続的インテグレーション)ということで、具体的には何度も繰り返しコードのテストやビルドといったアクションを実行することを指します。

また、これらのアクションが実行されるタイミングはコミット時が基本です。コードをコミットするタイミングで毎回コードがテストされるので、何か問題があればすぐに気づくことができるというわけです。

CIの設定の仕方

C言語のプロジェクトのCIを設定するという想定で詳細は省略しながら簡単に説明します。CIを行うサービスは複数ありますが、その中でも代表的なCircleCIを使用します。

f:id:handaijk:20190530131118p:plain
CircleCI

1. CI設定ファイルを作成する

CIで何を行うかを定義するファイルを作成します。CircleCIの場合は.circleci/config.ymlに作成します。以下の例では、gccでCのソースファイルをコンパイルし、コンパイルしたものを実行するという流れになっています(8-9行目)。本来はテストコードを実行したりするのですが、今回はコンパイルが通ればOKとしています。

version: 2.0
jobs:
  build:
    docker:
      - image: gcc:6
    steps:
      - checkout
      - run: gcc -o main main.c
      - run: ./main

workflows:
  version: 2
  build:
    jobs:
      - build

2. CircleCIの画面でGitHubリポジトリを登録する

GitHubにコードがpushされたらCIが実行されるようにCircleCIの画面でリポジトリを登録します。CIをしたいリポジトリの「Set Up Project」ボタンを押します。

f:id:handaijk:20190530125405p:plain

3. GitHubにコードをpushしてCIが自動的に開始するか確かめる

うまく設定ができていたらGitHubにpushしてすぐCIが開始します。異常なく終了したら緑色(Pass)に表示が変わります。もしエラーがあれば赤色(Fail)になります。

f:id:handaijk:20190530130023p:plain
Passした時の画面(コンソールの出力も表示されていますね)

ちなみに、GitHubの画面にもCIがPassしたかFailしたか表示されるのでとても便利です。

f:id:handaijk:20190530130345p:plain
GitHubではCI実行中はオレンジ色、Pass時は緑色、Fail時は赤色になります

まとめ

CIを使うことで常時コードにチェックが入るようになるので、より自信を持って開発を進めることができます。CircleCIなど、多くのCIサービスではオープンソース(公開設定がPublicなリポジトリ)の場合無料で使用することができます。CIは本当に便利ですよ~!

今回テストで作成したリポジトリはこちら

富士通研究所でのインターンシップ体験談

f:id:handaijk:20190528113653p:plain

こんにちは、M2の高木です。

インターンの体験談を寄稿してほしいと言われたので、M1の夏休みに参加した富士通研究所でのインターンについて書きたいと思います。

インターンが始まるまで

富士通研究所インターンには、ざっくり言うと指導教員の紹介で行きました。選考方法は、研究内容の資料を送って、希望する部署の方と、研究内容、将来やりたいこと、今持っているスキルなどについて面談するというものです。

インターン開始前にして、このインターン最大のありがたい出来事がありました。

受け入れ先チームのメンターさんが、実習内容の詳細な希望を聞いてくださり、私のやってみたいことを取り入れた計画を作ってくれました。当時の私は、「こんなん同じチームの全インターン生にやってたら大変なんじゃないの?」と思ったわけですが、「同時期のインターン生が私しかいない」というのが実態でした。

実習内容

インターン中にやっていたことは、大きく分けて以下の通りです。

  • 研究業務の一部(これがメイン)
  • 他の部署のインターン生と展示室の見学
  • 最終日に、部署内で成果報告

ちなみに、待遇等は

  • 期間は3週間、9時前から17半過ぎ(忘れた)まで
  • 服装自由(最高!!!!!)
  • 交通費、宿泊先(職場から徒歩数分)提供
  • 日当1000円(昼食代補助)

で、よくある大企業のインターンの待遇だと思います。

研究業務

詳細を書き始めると非常に長くなる上、これを読んでいる皆さんが同じことをすることはまずないと思うので、簡単に書きます。詳しく聞きたい人がいれば聞いてください。

私がやらせてもらっていたのは、エッジコンピューティング環境(分散環境)におけるメッセージングシステムの負荷テスト用のツールの作成です。これだけ聞いてもなんじゃそりゃって思うと思います。

DockerとかKubernetesとか(仮想化技術の一つ)を使った分散環境でメッセージングシステムを構築して、限界までメッセージを送りまくるスクリプトを書いたり、どのメトリクスが最初に限界になるのか観察したりしていました。

環境構築に割と苦労してしまい、最後の方が駆け足になりましたが、一応それらしいものを作るところまではできました。私がいなくなった後もそのスクリプトを使うと言われましたが、果たしてどれだけ役に立っているのか…。

他にも、文献調査をちょっと手伝ったり、特許に関する打ち合わせに出たりしていました。この辺は社外秘なのでこれぐらいで。

日々の打ち合わせの他に、部署内で集まって近況報告をするミーティングもありました。そのミーティングにも出て、大学での研究内容を紹介したり、個人的な近況(土日にどこに観光に行ったとか)を報告したりしていました。

展示室の見学

他の部署のインターン生(8人ぐらいだったと思います)と一緒に研究所内の展示室の見学をする時間がありました。自分の研究に近い内容のものもあれば、当然まったく知らない内容のものもあり、普通に楽しみました。

インターンが終わった後に、展示室で見たものがテレビやニュースサイトで紹介されていて、少し興奮したのを覚えています。

成果報告

インターンの最終日には、成果報告を行いました。どこの企業のインターンでもやっていると思いますが、私の場合、部署内のインターン生は私のみで、当然インターンの成果報告をするのも私のみなので、たっぷり時間をもらい、私の発表を聞くためだけにお集まりいただいた重役の皆様に、成果を報告しました。

一応、オーディエンスの皆様には、「未経験でここまでできたのは素晴らしい」と言ってもらえました。よかったです。

得られたもの

もちろん、初めて扱うDockerやKubernetesに関する知識や経験も得られましたが、なにより、企業研究所の雰囲気を味わえました。

例えば、やっぱり企業は特許とかビジネスとかが第一に来るんだなあ、とか、思っていたよりも自由に議論しているなあ、とかです。前者は予想通りといえば予想通りでしたが、後者は個人的にとてもよかったです。上司と部下、先輩後輩の関係はありますが、一方的な指示が通っているのではなく、皆でオープンに議論している様子が感じられました。

所感

情報科学研究科では、2週間以上のインターンに参加すると、単位が取得できます。なので、2週間行きたいなあと思っていましたが、3週間は絶対長いと思っていました。しかし、終わってみると3週間はあっという間でした。充実していたのは間違いないと思います。

インターンのいいところは、ズバリ、褒めてもらえるところです。本当にびっくりするぐらい褒められました。大学というか、研究室での生活で一応自分は成長しているんだろうなあ、ということを感じられるいい機会だと思います。

前述の通り、私がインターンに参加したときは、周りにインターン生がおらず、インターン生のために使用されるリソースを100%注いでもらうことができました。最初にも書きましたが、実習内容の希望を聞いてもらえるし、わからないことがあったらいつでも聞けるし、よく構ってもらえます。

インターン生同士でグループワークをするタイプのインターンもたくさんあると思いますが、少人数で社員の中に放り込まれるタイプのインターンも得られるものはかなりあると思います。

終わりに

以上の体験が参考になれば幸いですが、私の体験は、かなり私の希望に寄せてもらったもので、一般的なインターンとは異なる部分があるかもしれません。 とりあえず、研究インターンも楽しいですよ!ということだけお伝えしたいです。

再帰は再帰でも安全な再帰

こんにちはHANDAI JKの石田です。

梅雨もまだだというのに連日真夏日でちょっとうんざりしますね! さて、今日は「再帰」の話をしようと思います。

再帰とは

関数の中で自分自身を呼び出すことです。階乗の計算や、フィボナッチ数列がよく例として挙げられますよね。

/* 再帰呼出しを使って階乗を計算する関数 */
int fact(int n) {
  if (n == 0) return 1;
  else return fact(n - 1) * n;
}

再帰の問題点

プログラマーの味方である再帰ですが、ちょっとした落とし穴があることをご存知ですか? 実は、上記のプログラムの引数に1,000,000のような大きな数を渡すとスタックオーバーフローが発生していしまいます。

なぜスタックオーバーフローとなるかというと、コンピューターの中でプログラムが実行されるその仕組みに理由があるので簡単に説明します。

関数内のローカル変数や関数末尾でreturnした時にプログラムのどの位置にジャンプするかといった情報はスタックという領域に格納されています。基本的にreturnされるタイミングでスタックの領域は開放されるのですが、再帰関数の場合returnする前にどんどん自分自身を呼び出していくのでスタックの領域が圧迫されていき、ついにはいっぱいになってしまうというわけです。

末尾再帰と末尾再帰最適化

じゃあ再帰関数は非安全かというと、そうでもありません!末尾再帰という形の再帰になっていれば、スタックオーバーフローは発生しないのです。以下がKotlinという言語で実装した末尾再帰版の階乗を計算する関数です。(Kotlinでは末尾再帰最適化をしてほしい関数にtailrecキーワードをつけます。)

fun factTailRec(n: Int): Int {
  tailrec fun f(n: Int, acc: Int): Int {
    return if (n == 0) {
      acc
    } else {
      f(n - 1, acc * n)
    }
  }

  return f(n, 1)
}

6行目に注目してください。「末尾再帰である」条件は「自分自身を呼び出した結果を返す」ということです。最初に登場した実装では再帰部分がreturn fact(n - 1) * n;となっていたのに対し、こちらの末尾再帰版の実装ではf(n - 1, n * acc)となっています。

末尾再帰になっているとコンパイラによって末尾再帰最適化が行われ、例えばループによる実装にプログラムが変換されるのでスタックオーバーフローが発生しないのです。

まとめ

末尾再帰でないと困るという実際のケースは限られますし、すべての言語が末尾再帰最適化に対応しているわけではないので、必ず末尾再帰でないというわけではありません!ですが、せっかく再帰を習ったのなら末尾再帰も知識として知っておくといいと思います。

M1の夏にサンディエゴ(アメリカ)に1ヶ月留学して開発を行った話

皆さんこんにちは。HANDAI JKの赤沢と申します。

本日は私がM1の夏に1ヶ月間UCSD(University of California, San Diego)で開発をした時のお話をさせてもらいます。

サンディエゴ

サンディエゴはアメリカ西海岸のメキシコとの国境に位置する町です。州で言うとカリフォルニア州に属してます。 日中は日差しが強い時間帯はあるものの一年を通して暖かい気候で、雨が降ることは滅多にありません(私が滞在した1ヶ月間では一度も降りませんでした)。 "全米で住みたい町No.1(Finest Town)"に選ばれるほどの、アメリカ屈指の過ごしやすさを誇ります。あの広大なアメリカですからね。全国1位とはスケールが違います。

また、海軍や海兵隊の基地が点在し、アメリカ太平洋艦隊の軍港も設置されています(引退した空母、ミッドウェーの中に入れちゃったりします)。自然なども海や山もあり豊かで、観光地としても有名な施設や場所が多く存在します。

そんなサンディエゴに存在するUCSD(University of California, San Diego)という大学の一研究室に1ヶ月間お世話になり開発を行いました。 所属先の研究室は何と、かの有名なIdeker教授のホーム、Ideker Lablatoryでした。その中のSoftware Development Teamのメンバーの一員として開発に携わりました。

日中は研究室で開発をしていましたが、それ以外の時間では滞在先のホストファミリーと一緒にビーチでサーフィンをしたり、現地の小学生達に日本語を教えたりしました。 また、週末になると近所の家族とバーベキューをしたり、教会に赴いたりといった、日本とは異なる文化にも触れることができました。楽しかったな。

f:id:handaijk:20190527141216p:plain

f:id:handaijk:20190527154607p:plain

ホストファミリーはお父さんとお母さん、10歳の男の子と17歳のお姉ちゃん(アメリカンJK!!)がいました。私的にはお姉ちゃんともっと仲良くなりたかった()のですが、彼女は忙しそうにしていたので、10歳の弟と彼が家に連れてくる友達(家に帰ると毎日5人くらい子供達が遊んでました)と一緒にスマブラスプラトゥーンをして過ごしました。日本にいる時とやってることが変わらない...

研修内容

一言で表すと、「JupyterLabの拡張機能としてのグラフ可視化ウィジェットの開発」を行いました。

情報科学技術の日常への浸透性が高まるにつれて、デスクトップアプリケーションではなく、オンライン環境上で作業が行われる機会が増えてますね。Word、Excelを使うよりもGoogleDocument、GoogleSpreadSheetなどを使ったほうが複数人での作業や機器間のデータ移動の手間の削減といった点で便利です。

このような動きはプログラム開発においても同様です。例えばPythonの場合、エディタとターミナルで作業してもいいんですけど、オンラインでやるときにはよくJupyterLabというシステムが使われます。

一方、この世にはグラフというものが存在します。ここでいうグラフはIT業界用語としてのグラフで、辺と頂点を持ったネットワーク図のようなものだと思ってください。

このデータが入ったファイルは基本的にテキストで記述されています。「この頂点はこっちと繋がっていて、この辺はこれとこれを繋ぎます。」みたいなことがつらつら6000行くらいに渡って書かれているわけですね。(もちろんグラフの規模によって変わりますが、僕が扱ったデータはそのくらいの分量でした。)

f:id:handaijk:20190527141436p:plain:w200

これをJupyterLab上で一発で目で見て分かるようにしようっていう試みをしました。細かい実装内容は割愛しますが、成果物はこんな感じです。

f:id:handaijk:20190527154653p:plain

(ちょっとだけ専門的な話)実装にはTypeScriptとReact、UIにはMaterial-UIを使いました。それからNDExNCBI等のパブリックデータベースからもデータを取得してjsonに変換し描画することも可能となっています。

チーム開発のやり方や大学の仕組みが日本とは大きく異なり、良い刺激をもらえました。基本的にミーティングやプレゼンテーションは分からないことがあればその場ですぐに質問、話者の話を遮りながらインタラクティブに行われます。週に一回行われる研究室全体でのランチミーティングではピザやサンドイッチが提供されるのですが、これらのお金は研究室から出されてるそうです。羨ましいですね。

おわりに

今回の研修は研究面ではもちろんのこと、それ以外の面においてもアメリカの生活に触れることができて、大変有意義でした。今後の私の人生で何かしら生きてくるものになるでしょう。英語の練習も大いに捗りましたね。 それから、滞在中に結構多くの日本人と出会いました。10人くらいは会ったかな。意外と世界は狭いですね。ドリンクのカップは大きかったですが。

2年生で1週間の三菱電機インフォメーションシステムズ株式会社(MDIS)のインターンに参加してみた

皆さん初めまして。基礎工学部3年の杉森です。

今回は2年生の時に東京で行われた三菱電機インフォメーションシステムズ株式会社(MDIS)のインターンに参加したことについてお話しさせていただきます。(まさかこういう機会に出会うと思ってなくて、写真がほとんどないです。ごめんなさい)

インターンは3年かM1しか参加できないわけではありません。少しでも興味ある方は短期インターンですが、読んでいただけると幸いです。(この記事を作成するにあたりMDISから許可をいただいています。)

動機

そもそもなぜ2年生で参加しようと思ったのか。僕の場合は、いくつかの条件が揃ったので行くことにしました。

  • 夏休みの間に参加できるタイミングがあったから
  • 自分の将来の進路について考えていたから
  • 交通費と宿泊の一部が出るから東京観光できるから
  • 面白そうだから

正直なところ、不純な動機もあります笑。しかし、あれこれ考えても機会は逃げてしまいます。テックイベントとは違い、参加するのは同世代の学生ばかり。参加するハードルとして高くないです。あとは参加するためにES書いて選考通って東京へっていう流れでした。

参加するにあたって

当然ですが、個人情報を入力するだけで1週間など数日に及ぶインターンに参加できることはほとんどないです。少なくともES(エントリーシート)を書きます。

開発経験がないとできないと思う人もいるかもしれませんが、なくても応募可能な企業は多くあります。学年制限を設けていないところもあります。インターンが気になる人は思い切ってESを提出してみましょう。また、6月にインターンの情報を公開し、6月中に締め切る企業もありますので、気になる企業のインターンの募集要項には目を通しておきましょう!

参加した企業について

僕の参加したインターン先の企業は先ほども言ったように、三菱電機インフォメーションシステムズ株式会社(MDIS)です。

三菱電機はよく聞くと思いますが、MDISは聞いたことがないと思います。(リクナビで見つけるまで僕も知らなかったです笑)三菱電機の子会社で情報サービス業を中心とした会社です。いわゆるSIerと呼ばれる企業です。興味のある方は以下のリンクから企業情報をみれます。

https://www。mdis。co。jp (リンク掲載許可をいただいています)

SIerとは簡単に言うと、システムを構築する際に、顧客の要求などを分析し、課題を解決するためのシステムの企画から開発までを請け負う企業のことです。顧客が企業である場合が多いので、あまり一般的に知られていないことが多いです。Sierにも種類があり、

  • メーカー系
  • ユーザー系
  • 独立系

と3つに分けられることが多いです。それぞれにメリット・デメリットがあるので、気になる人が調べてみてください。

研修内容

このインターンでは、プロジェクトシミュレーションとして、与えられたプロジェクトの概要に対してチームで解決策を考え、それを紹介するホームページを作成せよというものでした。また、ホームページ作成における制約事項として、

  • 1ページ以上/人
  • 入力フォーム(問い合わせ画面、会員登録画面、アンケートなど)を2つ以上盛り込む
  • 各ページのレイアウトは統一した内容にすること

が与えられました。

つまり、今回の場合はHTMLとCSSを主に使うため、技術的な要素はあまり求められていません。

大学でやってることより簡単そうじゃないですか?
しかし、実際にプロジェクトを進める上で必要となる

  • 時間管理
  • イデアの出し方
  • 書類作成の方法
  • コミュニケーション能力

といったスキルが求められます。特に時間管理を間違えるととんでもないことになります(実際に最後とんでないことになりますがそれは後ほど)。

実施ステップ

一週間の間に以下のことを行なっていきました。(本当はタイムテーブルをそのまま挙げたいですが、それは許可がないのでごめんなさい!)

  1. HTMLとCSS入門
  2. テーマ設定
  3. プロジェクト計画の決定
  4. ホームページの設計、仕様書の作成
  5. ホームページの製作
  6. ホームページの動作確認
  7. 最終発表のプレゼン作成 

3と4は特に説明についても詳しくありました。開発する上で、これを疎かにするとあとでその修正に時間を費やす可能性があるからです。さらに、開発における安全性や品質の保証として、いくつかのチェックポイントが設けられています。

  • レビュー指摘率
  • 試験密度
  • 誤り検出率

などが挙げられます。この基準の具体的な数値については明かせませんが、こういった項目をクリアしなければなりません。ただコードを書いてそれっぽく動いてるからオッケーという授業でのプログラムの確認とは違いますね。 

研修中の様子

企業、業界についての説明とHTMLの講義が終わると、ここからがプロジェクトシミュレーションの始まりです。

まず、4チームに分かれて、最終発表に向けてテーマの決定を行なっていきます。与えられた概要に沿うように各チームがそれぞれのテーマを作り上げていきます。

どの班も積極的に意見交換や議論を行い、部屋全体としては賑やかになってます。また、ここまではすべての班が予定表通りに計画を進めているので、若干の余裕も感じられました。

2日目以降になると、一部の班では計画とのズレが生じ始めます。僕の班はすでにズレ始めてましたね笑。ホワイトボードに何度も書いては消し、書いては消しを繰り返し見るも無残な状態になっていました。ホワイトボードに書いたTodoリストもちゃんと機能させられていなかったように思います。

3日目には、ほとんどの班がズレてます。すでにズレてた班はもっとズレてます。ちゃんと組んだはずの計画がこうもズレてくるとはどの班も思ってなかったようです。

4日目にもなると…

 

どの班も完成させるために必死になってます。設計で色々考えすぎて果たしてどこまで実装してそれを動作確認し、チェックポイントをクリアできるかの勝負になってきます。どこの班もパソコンの前でひたすら作業してます。

簡単に言えば納期ギリギリのデスマーチ状態です笑。

          /\

     。 ∵ 。/  。/|

     _、 、_゚ ∴\// オワンネー!

   (ノ゚Д゚)ノ   |/

  /  /

 ̄ ̄ ̄ ̄ ̄ ̄

思い出しただけで笑えてきますが、なかなかに大変でしたね。(プログラミングCで似たようなことになったのは内緒)

そして最終発表日の午前中にプレゼン資料を手分けして作成します。クリアできてない項目があればこのときも同時並行でやってます。僕の班は当然同時並行でしたよ。あれが終わってない、これが終わってないだらけでした笑。

そして最終発表と質疑応答でした。明確な順位付けはされないのでこっからは完全に主観です。個人的にはホームページは他の班に比べて、現代的で見やすくスッキリした出来になっていたと思ってます。しかし、テーマとその解決策が甘かったと思います。そもそもとある前提条件を忘れて考えていたテーマを無理やりそれに合わせる形になってしまったので本来の良さを出せなかったというのが残念でした。

その後は社員さんとの個人面談を行い、フィードバックをいただいて終了です。長い戦いが終わりました。数日間によるインターンだとこういったフィードバックが具体的で様々な面を見た上での評価になるのでとても参考になりました。2年生だろうと、そのことには一切考慮せずに見ていただいていたなと感じました。

そのあとは班のメンバーで飲みにいきました!お疲れ様ーー!!

得たこと

簡単にですが、参加したことで得たことについて挙げていきます。

まずは、SIerという職種とその業界に関する知識、システム開発における工程について知ることができました。情報という幅広い分野の中で、どういうものがあるのかを知ることは後の進路決定に役立つと思います。またチーム開発における難しさについても学びました。PBLも大概ですが、このインターンの場合、期間が長くないので少しの時間も無駄に出来ないです。その中でどのようにするのかを考えることが多かったです。 

何より僕がこのインターンで得たことは、もっと開発をしてみたいという熱意でした。うまくいかなかったのは、知識的に知らないことがあったから、経験がないからだと思うことが多々ありました。その結果、僕は前のバイトを辞め、現在はある企業で自社システムの開発のバイトをしています。相変わらずわからないことだらけですが、あの時よりは進歩していると感じます。

終わりに

ここまで参加したインターンについて話してきました。一日のインターンもいくつか参加したこともありますが、やはり得られるものはあまり多くないです。時間が少ない上に、実際の業務と離れたことをすることが多いからです。実際にどういうことをしているのか知りたい人は、ぜひ積極的に複数日のインターンに参加してほしいです!大変だったりもしますけど、すごく楽しいですし学ぶことも多いです。!周りがどうこうとかは関係ないです。自分がこうしてみたいと思ったら積極的に行動してみましょう!

やらない後悔よりもやる後悔を選びましょう!

おまけ

参加する場合、bootstrapというものについて知っておくといいでしょう。知らない班とは比べ物にならない出来栄えになるので調べておくといいと思います。

Markdownを使ってレポート課題をサッサと終わらせよう

HANDAI JKの石田です。

大学の研究室に新しいメンバーが入ってきて、新しい気分で新年度を迎えられそうです。 さて、今回はMarkdownの話をしたいと思います。

Markdownとは

Markdown(マークダウン)を使うと、簡単かつ高速にいい感じに文書を作成することができます。 聞くより実際に触った方が分かりやすいと思うので、StackEditMarkdownを体験してみましょう!

stackedit.io

Markdownの記法

Markdownで見出しを作るには頭に「#」をつけます。

# ミダシ1
## ミダシ2
### ミダシ3

「#」の数を増やすとさらに小さな見出しになります。

また、箇条書きにするには頭に「*」をつけます。

* アイテム1
* アイテム2
  * アイテム2-1
  * アイテム2-2

StackEditで試してみるとこんな感じで表示されると思います。簡単ですね!

f:id:handaijk:20190415173313p:plain
StackEditの画面 (左が入力、右がプレビュー)

Markdownは何に使われているか

MarkdownOSSプロジェクト等のREADMEと呼ばれる、ソフトウェアの添付文書のフォーマットとして広く使われています。

f:id:handaijk:20190415173633p:plain
GitHubに公開されているREADMEの例 (facebookresearch/Detectron)

また、Pandoc - About pandocというものを使うことでMarkdownをPDFにも変換できるのでちょっとしたレポートを作成する時にも便利です。僕はたまに大学のレポートをMarkdownで書いていました!

And more

Markdownには見出しや箇条書きのほかに太字にしたり、斜体にしたり、リンクを貼ったり、画像を入れたり、引用をしたりできます。記法はググって調べてみてください。すぐに慣れて使いこなせるようになるはずです!

IDEを使ってプログラミングの課題をサッサと終わらせよう

HANDAI JKの石田です。あと2週間ちょっとで令和時代ですね!さて今回はIDEの話をします。

IDEとは

Wikipediaによる説明は以下の通り。

An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development.

学校ではシンプルなエディタ(メモ帳やNotepad++など)を使用するように教えられることもありますが、IDEの方が圧倒的に便利なので僕は1年生の後期からバリバリIDE(Visual Studio)を使っていました。

IDEの便利な機能

IDEにはコーディングを「楽」にしてくれる機能がたくさんありますが、代表的な2点を紹介します。

コード補完

f:id:handaijk:20190415120056p:plain
途中まで入力したら、変数名や関数名をサジェストしてくれる。

エラー検出

f:id:handaijk:20190415120311p:plain
コンパイルをしなくとも、構文的に間違っていたりするとエラーが表示される。(スペルチェッカのようなもの!)

デバッグ

f:id:handaijk:20190415121725p:plain
コードの実行を途中で止めて、変数の値を確認したりできます。

代表的なIDE

たくさんのIDEが開発されていますが、有名なものを紹介します。

僕はWindowsユーザーだったので、Visual Studioを使って学校のC言語の課題に取り組んだり、C#Windowsアプリを作ったりしていました。macOSの人はXCodeを使ってiOSのアプリを作れます。JetBrainsが出しているIDEはどれも優秀で、同じ操作性でJava, Python, C言語などを書けるのでおすすめです。(学生はなんとタダですし。)

まとめ

IDEを使うと圧倒的に楽に開発を行うことができます。最初は設定でつまづいたり、機能が多すぎて混乱したりもしますが少しずつ覚えていけば大丈夫です!よい開発を!