Intellij ファイル作成ショートカット

ずっと、⌘+nでなんでファイル作成できないんだ?と思っていた。 結局⌘+nであっていた。やる場所を間違えていたようだ。

やり方

⌘+1でProjectに移動し、ファイルを作成したいディレクトリに移動する

⌘+n でファイルを作成

これでマウスを使わないで済む

島根県のコロナウイルス対策サイトを作ったぞ!

島根県について

私は現在東京都に住んでいますが、出身は島根県です。 島根県は、まだコロナウイルス感染者がいないです。 そのせいか島根県は東京都は違いコロナウイルス対策の緊張感がまだ薄い気がしています。 島根県は高齢者率がとても高いので、感染が見つかると死の危険が高い気がしてます。

4 地域別にみた高齢化|令和元年版高齢社会白書(全体版) - 内閣府

島根県のコロナ情報について

島根県は公式でコロナ特設サイトを設けていますが、文字ばかりで見ずらいという問題点を感じました。

www.pref.shimane.lg.jp

東京都のコロナ対策サイト

一方、東京都には東京都が運営している新型コロナウイルス感染症対策サイトという公式のサイトがあり、 東京都のコロナ感染者数などの情報がグラフなどで見やすい状態で提供されています。

stopcovid19.metro.tokyo.lg.jp

また、このサイトはOSSであり、誰でも改善要求を出したり、改善コードを投稿したりすることができます。

github.com

私も何件かPRを出しています。

そして島根県版開設

島根出身の中学の同級生と協力しながら、半日で開設しました。 shimane-covid19.netlify.com

東京都のコロナ対策サイトのOSSは偉大であり、他の都道府県バージョンにも改変しやすい形となっており素晴らしいです。 コロナウイルスでは嫌な思いばかりだけど、コロナウイルスのおかげでOSSの偉大さにも気づけた気がしています。

でも早く収束してほしいです。

英語を勉強するためのPodcast

何かをやっている片手間、英語を勉強したかったので英語系のPodcastを探していました。 これは神!というものをSpotifyで見つけたので、紹介します。

台本なし英会話レッスン

player.fm

これは、日本人のそーたさんとアメリカ人のNateさんが即興で英語でディスカッションをするという内容のPodcastです。お二人共英会話講師なので、しっかりした英語が学べそうな気がします。 基本的には、短いディスカッションをしたあとに、そーたさんが日本語で単語の意味などを解説してくれます。なので英語があまり得意でない方にもおすすめです。

Guru99[Java Tutorial]

www.guru99.com

Guru99.comなるJavaチュートリアルが載っているサイトがある。 それのTop 100 Java Interview Questions with Answersセクションをまとめてみた。

Top 100 Java Interview Questions with Answers

1. Inner ClassとSub Classの違い

内部クラスは、クラス内にネストされたクラス サブクラスは、スーパークラスを継承しているクラス

2. Javaクラスのアクセス指定子は何ですか?

Public:どこからでもアクセス可能 Protected:同じクラス、サブクラス、同じパッケージから参照可能 デフォルト:同じパッケージからのみアクセス可能 Private:同じクラスからのみ

3. Static methods と static variablesの目的は何?

Staticなフィールドはプログラム全体で1つしかないことが保証される インスタンスを生成しなくても使える、クラスに紐付いている、クラスで1つの変数 全てのオブジェクトで共有されるメソッドまたは変数を作成する

4. データのカプセル化とは何ですか?

カプセル化は、プロパティとメソッドを1つのユニットに結合するための概念。データを隠す目的にも役立つ

5. シングルトンクラスとは?

シングルトンクラスは、1つのインスタンスしか持つことができないデザインパターン 例)いくつかのドライバー制限・ライセンス問題のために、データベースへの接続が1つだけになる制限がある場合

6. Javaのループとは何ですか?

For While Do While

7. 無限ループとは?

無限ループは条件無しで実行され、無限に実行される

for (;;){
}

8. continueステートメントとbreakステートメントの違いは?

break: ループを即座中断 continue: 現在のループを中断、次のループへ

9. Doubleとfloatの違い

Double は8バイト Floatは4バイト Javaの数値リテラルで小数を表す場合、デフォルトでdouble型になる。floatとして解釈させたい場合は末尾にfが必要

10. Javaのfinalキーワードとは?

Finalを使用することで定数が宣言できる。 値は1回しか割り当てることができず、割当後に定数の値を変更することはできない。 クラスがfinalとして宣言されている場合、サブクラス化することができない。

11. 三項演算子とは何ですか?

Boolen値の評価に基づいて、変数に割り当てる値を決めることができるなど

status = (rank == 1) ? “Done” : “Pending”;

12. Javaで乱数を生成するにはどうすれば良いですか?

  • Math.random() を使用すると 0.1 ~ 1.0未満の乱数を生成できる
  • Randomクラスを利用する

13. Default switch caseとは?

Switch文の条件が一致しない場合にdefaultケースが実行されます。

14. 全てのクラスの派生元であるJavaの基本クラスは何ですか?

java.lang.object

15. Javaのmain()は任意データを返すことができますか>

できません。 常にvoid型戻り値で宣言されます。

16. Javaのパッケージとは何ですか?

パッケージを利用すると、コードをモジュール化でき、適切に再利用することができる。パッケージ化されたコードは、他のクラスにインポートして使用できる

17. 抽象メソッドを持たずに抽象クラスとして宣言できますか?

できます。 抽象メソッドがなくても、クラス名の前にabstractキーワードを使用して抽象クラスを作成できます。 ただし、クラスに抽象メソッドが1つでもある場合、抽象クラスとして宣言する必要がある。

18. 抽象クラスとインターフェースの違いは何ですか?

インターフェースは実装のないpublic staticメソッドの宣言のみを持つ 抽象クラスは具体的な実装の有無に関係なく、アクセス指定子を持つメンバーを持つことができる

インターフェースを実装するクラスは、インターフェースの全てのメソッドを実装する必要がある 複数のインターフェースを実装できるが、1つの抽象クラスしか持つことができない

19. 抽象クラスとインターフェースのパフォーマンスについて

インターフェースには追加のインダイレクションが必要なため、抽象クラスの方が速い また、インターフェースは全てのメソッドを実装する必要がある

20. パッケージをインポートすると、サブパッケージもインポートされますか?

必要に応じて、個別にインポートする必要がある。

21. クラスのmainメソッドをprivateとして宣言できますか?

できません。 public staticである必要が有ります。 privateで実行すると、コンパイルエラーは発生しないが、ランタイムエラーが発生する。

22. 値渡しではなく、参照渡しで関数に引数を渡すにはどうすれば良いですか?

Javaでは、参照ではなく値によってのみ引数を関数に渡しことができます。

23. オブジェクトはどのようにシリアル化(連続化)されますか?

シリアライズJavaインスタンスをバイト列として出力すること。 Serializableインターフェースを実装するクラスのオブジェクトは全て、シリアル化され、その状態はバイトストリームに保存される。

24. シリアル化が必要とされる場合はどんな時ですか?

データをネットワーク経由で送信する必要がある場合、シリアル化が使用される。

25. Tryブロック後に例外処理のためにCatchブロックが続くことは必須ですか?

Tryブロックのあとには、Catch、finallyブロックが続く必要がある。 Tryブロックからスローされた例外は、catchブロックでキャッチするか、コードの中止がfinallyブロックに配置される前に実行する特定のタスクのいずれかである必要がある。

26. 例外ブロックで何らかの例外が発生した場合でも、finallyブロックをスキップする方法はありますか?

例外が発生するとfinallyブロックが常に実行されるます。 唯一の保言う方は、tryブロックの最後に次のコードを書き込むことで、コードを強制的に中止すること

System.exit(0);

27. クラスのコンストラクターが呼び出される時は?

コンストラクターは新しいキーワードでオブジェクトが作成されるたびに呼ばれる。

28. クラスに複数のコンストラクターを含めることはできますか?

できる。 異なるパラメーターを持つ複数のコンストラクターを持つことができる。 使用されるコンストラクターはオブジェクト作成中に渡される引数によって異なる。

29. staticメソッドはオーバーライドできますか?

できません。 Staticメソッドは個々のオブジェクトではなく、クラスに属し、コンパイル時に解決されます。

30. 出力はどうなりますか?

Displaying from subClass
Printing from superclass

31. String はJavaのデータ型ですか?

Stringは、Java.Lang.Stringクラスのオブジェクトです。 つまり、Stringクラスの全ての組み込みメソッドをStringオブジェクトで使用することができる。

32. いくつのStringオブジェクトが作成されますか?

2つ 同じ文字列を参照する場合は、同じオブジェクトへの参照となる。

33. Javaの文字列が不変として呼び出される理由

Javaでは、値が文字列に割り当てられると、文字列オブジェクトは不変として呼ばれ、変更できず、変更された場合は、新しいオブジェクトがさくせされる。

34. 配列とベクター(Vector)の違い

配列は、同じプリミティブ型のデータをグループ化し、本質的に静的 ベクトルは本質的に動的であり、異なるデータ型のデータを保持できる

35. マルチスレッドとは何ですか?

マルチスレッドは、1つのプログラム内で複数のタスクを実行するプログラミング概念 スレッドは同じプロセススタックを共有して、並行して実行される。

36. Runnable インターフェースがJavaで使用される理由

Runnableインターフェースはマルチスレッドを利用するため

37. Javaでマルチスレッドを実装する2つの方法は何ですか?

  • Java.Lang.Runnableインターフェースを使用する。
  • Java.Lang.Threadクラスを継承する

38. データに多くの変更が必要な場合、どの設定を使用する必要がありますか?

StringBuffersは本質的に動的であり、不変Stringとは異なり、StringBufferオブジェクトの値を変更できるため、データの変更が多い場合には常にStringBufferを使用することが推奨される Stringだと、毎回オブジェクトが作成され、余計なオーバーヘッドが発生する

39. SwitchステートメントでBreakを使用する目的は何ですか?

有効なケース後にbreakし、他のケースが実行されないようにするため

40. JavaでのGCはどのように行われるか

Javaは、オブジェクトが参照されなくなるとGCが行われ、オブジェクトが行われ、オブジェクトは自動的に破棄される。

41. mainメソッドの前でもどのようにコードを実行できますか?

42. クラスを同時にスーパークラスとサブクラスにすることはできますか?

できる

43. クラスでコンストラクターが定義されていない場合、クラスのオブジェクトはどのように作成されますか?

定義されない場合も、デフォルトのコンストラクターが暗黙的に使用されるため、オブジェクトは正常に作成される。

44. マルチスレッドで、リソースが複数のスレッドに同時に使用されないようにするためにはどうすれば良いですか?

Synchronizedキーワードを使用することで、1つのスレッドのみが共有リソースが使用でき、他のスレッドがリソースを使用している他のスレッドから開放された場合にのみ他のスレッドがリソースの制御を取得できる

45. オブジェクトのクラスのコンストラクターを複数回呼び出すことはできますか?

新しいキーワードを使用して、オブジェクトを作成するとコンストラクターが自動的に呼び出されます。作成後に再度呼び出すことはできません。

46. ClassAとClassBという2つのクラスがある。ClassBからClassAのプライベートメンバーにアクセスできますか?

アクセスできない。

47. 同じ名前のメソッドをクラスに含めることはできますか?

定義できる。パラメーター数・型が異なれば定義可能

48. Javaオブジェクトのコピーを作成するにはどうすれば良いですか?

Clone()はCloneableインターフェースのメソッドであるため、オブジェクトのコピーを作成するには、Cloneableインターフェースを実装する必要がある。

49. 継承を使用する利点は何ですか?

継承を使用すると、サブクラスがスーパークラスのコードを再利用することができる。 ポリモーフィズムは既存お派生クラスに影響を与えずに新しい機能を導入できる大きな利点

50. クラスの変数とメソッドのデフォルトのアクセス指定子は何ですか?

変数とメソッドのデフォルトのアクセス指定子はパッケージで保護されている。つまり、変数とクラスは、パッケージ外ではなく、同じパッケージ内の他のクラスで使用できる。

51. Javaクラスでポインターの使用はできますか?

できません。 Javaにはポインターの概念がない

52. クラスを継承できないように、制限するにはどうしたらよい?

Finalキーワードを使う。

Public Final Class Stone {
}

53. Protectedアクセス指定子のスコープは?

Public: Class, Package, Subclass, World Protected: Class, Package, Subclass No modifier: Class, Package Private: Class

54. スタックとキューの違いは?

スタック、キューともにデータのコレクションのプレースホルダーである。 スタック:LIFO キュー:FIFO

55. Javaでは、変数のシリアル化をどのように禁止できますか?

Transientキーワードを使用する

56. プリミティブデータ型をオブジェクトとして使用するにはどうすればよいですか?

ラッパークラスを使用してオブジェクトとして処理できる。 Integerはプリミティブデータ型intのラッパークラスです。

57. コンパイル時にどのタイプの例外がキャッチされますか?

チャックされた例外は、プログラムのコンパイル時にキャッチできます。 コードを正常にコンパイルするには、コードでtry catchブロックを使用して、チャックされた例外を処理する必要が有ります。

58. スレッドの様々な状態を説明してください

  • Ready: スレッドが作成されると、準備完了状態になります。
  • Running: 現在実行中のスレッドは実行状態です。
  • Waiting: 特定のリソースを解放するために別のスレッドを待機している
  • Dead: 実行後にデッド状態になったスレッド

59. 明示的なコンストラクターが定義されている場合でも、クラスのデフォルトコンストラクターを使用できますか?

明示的なコンストラクターが定義されている場合は、定義されているコンストラクターのみを使用できる。

60. 同じメソッド名と引数を使用し、異なる戻り値の型を使用していメソッドをオーバーライドできますか?

オーバーライドは、メソッド名、引数、戻り値の型が全く同じでなければオーバーライドにならない。

61. 次のコードの出力はどうなりますか?

4

62. staticメソッドないから non-staticメソッドを呼び出すことはできますか?

Non-staticメソッドはクラスのオブジェクトによって所有され、オブジェクトレベルのスコープを持つ。 呼び出すためには、クラスのオブジェクトを作成し、オブジェクト参照を使用してこれらのメソッドを呼び出す。

63. Javaプログラムを実行するために設定する必要がある2つの環境変数

Path変数 CLASSPATH変数

64. Javaで変数を初期化せずに使用できますか?

Javaでは、有効な値による事前の初期化を行わないと、コンパイルエラーとなる。

65. クラスを複数のクラスから継承できますか?

Javaでは、複数のクラスからの継承である多重継承はサポートされておらず、1つのクラスからの継承である単一継承のみ。

66. コンストラクターはクラス名と異なる名前を持つことができますか?

名前が違う場合は、コンストラクターとして機能せず、通常のメソッドとなる。

67. Round(3.7)、Ceil(3.7)の出力はどうなりますか?

4 4 Round: 四捨五入 Ceil: 切り上げ Floor: 切り捨て

68. Javaでgotoを使用して特定の行に移動できますか?

Javaにgoto機能のサポートはない。

69. デッドスレッドを再び開始できますか?

Javaでは、デッド状態のスレッドを再び再開することはできない。

70. 次のクラス宣言は正しいですか?

Public abstract final class testClass {
}

抽象クラスはFinalとして宣言できないため、正しくない。

71. Javaプログラムを実行するには、各マシンでJDKが必要ですか?

JDKJavaの開発きっとであり、開発にのみ必要である Javaプログラムを実行するには、JREのみで十分。

72. equalsメソッドと==演算子の違いは?

Equalsメソッドは、オブジェクトの内容を比較 ==演算子は、オブジェクトの参照を比較している。

String str1 = new String(“Hello World”)
String str2 = new String(“Hello World”)

Str1とstr2を比較すると Eqalsメソッドではtrue ==演算子ではfalse となる。

73. Javaにおいて、C言語のコードで実装を提供することはできますか?

はい。 JavaからCの処理を呼ぶ方法(JNI/JNA/SWIG) - Qiita できそう。

74. Javaでデストラクタの定義は?

デストラクタ:インスタンスが破棄された際に実行される。コンストラクタの逆。 Javaにデストラクタの概念はなく、独自のガーベージコレクションがあるため、オブジェクトの参照がなくなると、自動的にオブジェクトを破棄する。

75. 変数は、ローカルとstaticを両方同時に使えますか?

ローカル変数をstaticとして定義するとコンパイルエラーとなる。

76. インターフェースに静的(static)メソッドを使用できますか?

静的メソッドはどのクラスでもオーバーライドできませんが、インターフェースのメソッドはデフォルトでは抽象であり、インターフェースを実装するクラスに実装することになっている。よって、インターフェースに静的メソッドを含めることに意味がない。

77. インターフェースを実装するクラスでは、インターフェースで定義されている変数の値を変更できますか?

インターフェースで定義されている全ての変数は、定数のようなものなので値を変更すことはできない。

78. JavaGCによってメモリ不足になることはありませんか?

GCによるメモリ解放より、オブジェクト生成が速いペースで行われると、使用可能なメモリリソースが一杯になる可能性があるため、メモリ不足にならないことはない。 GCはメモリ不足を保証するものではない。

79. mainメソッドにvoid以外の戻り値の型を設定できますか?

いいえ、Javaのmainメソッドの戻り値はvoidのみ Mainメソッドの完了時に値を返す必要がある場合は、System.exit(int status)を使用できる。

80. GCが完了したら、オブジェクトに再度アクセスすることは可能ですか?

オブジェクトがGCで破棄されると、ヒープ領域に存在しなくなるため、再びアクセスすることはできず、再度参照する方法もない。 ヒープ領域:動的に確保と解放を繰り返せるメモリ領域のこと。プログラム実行時に、OSからソフトウェアに対して、一定量のヒープ領域が与えられる。ソフトウェアは必要に応じて、任意にヒープ領域を確保・解放できる。データの仮置き場や臨時の作業台のような存在。

81. スレッドプログラミングでは、どのメソッドが全てのスレッドの必須実装ですか?

Run()はRunnablインターフェースのメソッド

82. プログラムでデータベース接続を制御し、一度に1つのスレッドのみがデータベースに接続を確立できるようにする必要があります。このロジックを実装するにはどうすればよい?

同期の概念を使用して実装できる。 データベース関連のコードは、Synchronizedキーワードを持つメソッドに配置できるため、一度に1つのスレッドのみがアクセスできる。

83. プログラマーが例外を手動でスローするにはどうすれば良いですか?

Throwキーワードを使用することで、例外が、catchブロックで処理される。

84. 作成したクラスを他のクラスがそのクラスのオブジェクトを作成できないようにしたい。

クラスのコンストラクターをprivateとして宣言すると、他のクラスからアクセスできなくなる。

85. Javaでのオブジェクトの保存方法

Javaでは、各オブジェクトの作成時にヒープからメモリスペースを取得する。 GCで解放されると、ヒープが再割り当てされ、新しいオブジェクトに対して使用することができる。

86. ヒープ上のオブジェクトのサイズをどのように確認できるか?

そんな方法はない。

87. 次のクラスで、多くのメモリが割り当てられるのはどっち?

クラスA:3つのメソッド、4つの変数、オブジェクトなし クラスB:5つのメソッド、3つの変数、オブジェクトなし

オブジェクト作成前にメモリ割り当ては生じないので、ヒープは度のクラスにも割り当てられない。

88. プログラムで例外が処理されない場合にどうなる?

Try catch ブロックを使用していない場合、プログラムが中止され、例外後のステートメントは実行されない。

89. クラスに複数のコンストラクターが定義されていて、別のコンストラクターの本体から呼び出すことは可能か?

this()で別のコンストラクターから1つのコンストラクターを呼び出すことができる。

90. 無名クラスとはどういう意味ですか?

無名クラスは、1行のコードで名前無しで定義されたクラス あるメソッドの中で、宣言され、その中でしか使わない。

import java.util.*;

class Application {
    public static void main(String[] args) {
        List<Employee> list = new ArrayList<>();
        // 省略

        Collections.sort(list, new Comparator<Employee>() {
            public int compare(Employee e1, Employee e2) {
                return Integer.compare(e1.getAge(), e2.getAge());
            }
        });
    }
}

new Comparator<Employee>()…が無名クラス

91. 宣言後に、配列のサイズを増やす方法はありますか?

配列は、静的であり、サイズを指定したあとの変更はできない。

92. アプリケーションに複数のクラスがある場合、複数のクラスにmainメソッドを含めることはできますか?

可能であるが、エントリポイントは特定のクラスのmainメソッドのみから開始される。

93. オブジェクトのデータを永続化したいための最良のアプローチは?

シリアル化の概念を使用すること Serializable について - Qiita

94. Javaのローカルクラスとは何ですか?

特定のメソッド内で新しいクラスを定義すること、 定義されているブロックの外部では使用できない。

95. StringとStringBufferを比較できますか?

StringとStringBufferは両方ともStringオブジェクトを表しますが、相互に比較することはできず、比較しようとするとエラーが発生する。

96. オブジェクトのセットの操作のAPIはどれですか?

ArrayList HashMap TreeSet TreeMap

97. 他の型をboolean型にキャストできますか?

できない。

98. オーバライドされた場合、メソッドに異なる戻り値を使用できますか?

できるけど、メソッド名がおなじで、同様のパラメーターを持つこと

99. 例外クラスの基本クラスは何ですか?

Javaでは、Java.lang.Throwableは全ての例外クラスのスーパークラス

100. 継承におけるコンストラクタの呼び出しの順序は何ですか?

軽症の場合、派生クラスの新しいオブジェクトが作成されると、最初にスーパークラスコンストラクターが呼び出され、次に派生クラスのコンストラクターが呼び出される。

プログラミング/language/java/GURU99

研究前には先祖周りをしろ

修士論文を絶賛執筆中ですが、4年生の頃にしっかりやっていれば良かったなぁと思うことです。

僕は研究で、心理物理学実験をしています。 しかし、人間の心理が介入する実験は、実験条件や実験刺激の設定が難しく、自分が想像した結果と異なる場合が多くあります。 それを少しでも少なくするために、先祖周りがあります。

結構当たり前のことなのですが、意外とやっていない人が周りに沢山いたので書き記しています。

先祖周りとは?

まず、研究には、先行研究や類似研究と呼ばれる自分の研究の親に当たるものがあるはずです。 例えばある現象や特定の機械学習のモデルを利用した研究には、その現象・モデルの元になった論文があるはずです。 その親論文の参考文献を周りまくって、自分の知識・研究の背景を固めるのが先祖周りです。

ちなみに、この名前は私が名付けました。

英語 勉強 動画

3月にアメリカのSXSWに参加します。 www.sxsw.com

一度、シリコンバレーに行ったことがありますが、英語が上手に使えないことがあり、大変な思いをしました。 タコス屋でメニューの説明が聞き取れず、めちゃくちゃ辛いものを食べたり、カフェで最高額のチップを払ってしまったり←これは英語関係ないw とりあえず、リスニングとスピーキング向上のために勉強しようと思いました。

本で勉強するのもありだと思いましたが、動画のほうが勝手にペースを作ってくれるので良さそうと思い、Youtubeで勉強することにしました。 そこで面白い・勉強になるの観点で私がこれなら続けられるかもと思ったYoutuberをPick upします。 All Englishが良いので日本人Youtuberは入れません。

BuzzFeed

www.youtube.com

とにかく、会話が多く聞き取りやすい動画が多い気がします。 食や雑談の動画多いので、実用性もあります。 BuzzFeedアメリカのオンラインメディアを運営する企業であるだけに編集なども良い感じです。

中でもWorth It - Food のカテゴリーが良いです。 速くて聞き取れない場合は0.75倍速でまず聞きましょう。

www.youtube.com

FBE

www.youtube.com

FBEはあることに対する子供から大人までのリアクションを撮影した動画です。 普段の会話などで使用するリアクションを学ぶことができます。 リアクションが良い=聞き上手 だと私は思っているので、英語圏の方とぐっと仲良くなれるかも!

Learn English With TV Series

www.youtube.com

このチャンネルは、テレビドラマや映画のワンシーンを抜き出して、そこで使用される単語やイディオムなどを英語で解説してくれます。 英単語の意味を英語で学ぶというところがオススメポイントです。

ERB

www.youtube.com

ラップなので、耳に残りやすいため暗記に良さそうかなと思い上げました。 実用的かは、微妙な所ですねww。覚えて歌えばウケそうな感じはしますね。

RubyでProductHuntのランキングをSlackに流す

タイトル通りですが、SlackのSlashコマンドを使って写真のようなProductHuntのToday'sランキングを流してくれるBotを作成します。

f:id:mikamimikami60:20200125182440p:plain
Slack通知

使用技術

ProductHuntのランキングスクレイパーを作成する

まず、欲しい情報を扱うためのモデルクラスを作成します。 とりあえず、Productモデルを作成しましました。 ProductHuntからプロダクトの単位ごとにスクレイピングをし、作成したインスタンスに格納します。

詳しくは、以下のリポジトリを見てください。

github.com

def scrape(doc)
    name = doc.css('h3').text
    description = doc.css('p').text
    category = doc.css('span.font_9d927.grey_bbe43').text
    detail_url = 'https://www.producthunt.com' + doc.css('a.link_523b9').attribute('href').value
    product = Product.new(name, description,category, detail_url)
    product
  end

Slack Slash Commandの準備

api.slack.com

ここから、Slack Appを作成しIncoming Webhooksでwebhook urlとSlash Commandを作成します。

f:id:mikamimikami60:20200125183448p:plainf:id:mikamimikami60:20200125183452p:plain
Slack Incoming WebhooksとSlash Command

ローカルで開発する場合

Slash CommandはRequest Urlを指定しないといけませんが、localhost:3000などのように外部から見えないURLは選択することができません。よって、ローカルではSlash Commandを使って開発するためにngrokを使用します。ngrokを使用することでローカルで立てたサーバーを外部からアクセスできるようにします。

ngrok.com

f:id:mikamimikami60:20200125183759p:plain
Slash Command Edit

Slack通知

Slack通知には、Slack Notifierを使用しました。

github.com