技術メモ

習得したIT技術の備忘録

【TwitterDeveloper】TwitterBot用アカウントを申請する方法

TwitterAPIを使いたいとき等に必要になる、TwitterDeveloperアカウント申請方法をご紹介します。
今回は、TwitterBot用アカウントの手順となっています。

1.(事前準備)Twitterアカウントを作成する

  • Twitterアカウントを作成する ※既にあれば不要

  • 作成したアカウントでTwitterにログインする

2.TwitterDeveloperアカウントを申請する

Twitte Developer Platformにアクセスする

②「Apply」をクリックする

f:id:tecmemo_y:20210801234200p:plain:w400
Developerサイトのトップ画面

③「Apply for a delevoper account」をクリックする

f:id:tecmemo_y:20210801234206p:plain:w400
Developerサイトの申請開始画面

④「Hobbyist」をクリックする
※今回は趣味のため

f:id:tecmemo_y:20210801234947j:plain:w400
ユーザ属性選択

⑤「Making a bot」を選択し、「Get started」クリックする
※今回はbot用のため

f:id:tecmemo_y:20210801234600p:plain:w400
申請タイプ選択画面

⑥「Add a valid phone number」をクリックする

f:id:tecmemo_y:20210801235047p:plain:w400
電話番号登録

Twitter画面に遷移します)

⑦「電話番号を追加」をクリックする

f:id:tecmemo_y:20210801235130p:plain:w400
Twitter電話番号登録1

⑧電話番号を入力する

f:id:tecmemo_y:20210801235237p:plain:w400
Twitter電話番号登録2

⑨ショートメールで届いた認証コードを入力する

(Developer画面に戻る)
⑩必要な情報を入力し、「Next」をクリックする
※「call you?」はユーザ名を入力する

f:id:tecmemo_y:20210801235330p:plain:w400
ユーザ情報入力

⑪必要な情報を入力し、「Next」をクリックする
※自分で文章を考えて、グーグル翻訳したものを張り付ける
※ネットで検索すると色々と例文出てくるのでここでは割愛

f:id:tecmemo_y:20210801235420p:plain:w400
申請理由の入力
⑫同意のチェックを入れて、「submit application」をクリックする
f:id:tecmemo_y:20210802000128j:plain:w400
同意画面

Twitterアカウントに紐づいたメールアドレスに確認メールが届きます)
⑬届いたメールを表示し「Conform your email」をクリックする

f:id:tecmemo_y:20210801235549p:plain:w400
確認メール

⑭「Create App」をクリックする

f:id:tecmemo_y:20210801235630p:plain:w400
createApp

⑮App nameを入力する
⑯「API Key/API Secret Key/Bearer Token」を任意の場所に保存する
※TwitterAPIを使用する際にこの情報が必要になります

f:id:tecmemo_y:20210801235745p:plain
APIkey

参考サイト

TwitterDeveloperアカウントの申請とAPIキー取得(GAS×TwitterBot①)|もりさんのプログラミング手帳

【Docker-Compose】(超ざっくり)ローカルにDocker環境を構築する方法

Docker-Composeを使用して、ローカルにDocker環境を構築する方法をご紹介します。
備忘録なので詳細なことは書いていません。予めご了承ください。

Dockerとは

コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである(Wikiより)

Docker-Composeとは

複数のコンテナを定義し実行する Docker アプリケーションのためのツールです。(公式より)

1.環境を構築する

(1)Docker Desktop をインストールする

Mac に Docker Desktop をインストールする
Windows に Docker Desktop をインストールする

(2)docker-compose.yml を作成する

任意のディレクトリに以下ファイルを作成します。

// docker-compose.yml 
version: '3'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

servicesに必要なサービスを列記していくイメージです。
詳細は以下参照
Compose ファイル・リファレンス

2.起動する

①docker-compose.yml の場所に移動する
②以下コマンドを実行する

docker-compose up

3.エラー時の対応

docker-composeを実行したら「指定されたファイルが見つかりません。となる
→WSLからWSL2に更新することで解消されました
Windows 10 用 Windows Subsystem for Linux のインストール ガイド

※備忘録:WSL2でメモリ圧迫する場合は以下対応する
WSL2によるホストのメモリ枯渇を防ぐための暫定対処 - Qiita

参考サイト

Docker - Wikipedia
Docker Compose 概要 — Docker-docs-ja 19.03 ドキュメント
youtu.be

【Nuxt+Firebase Authentication 】ソーシャルログイン実装方法

Nuxt+Firebase Authenticationを使用したソーシャルログイン実装方法を紹介します。

完成イメージ

今回はGoogle アカウントを使った認証機能を行います。

ソーシャルログインの完成イメージ
完成イメージ

1.ソーシャルログインとは

ソーシャルログインとは、ユーザーが使い慣れた既存WebサービスSNSのアカウントを利用して、別のWebサービスにログインできる仕組みのことです。

connpassのログイン画面(ソーシャルログインが導入されている)
connpassのログイン画面

面倒なアカウント作成から解放されユーザとしても嬉しい、そしてログイン処理を自分たちで書かなくていい!という開発者としても嬉しい仕組みです。

そんなソーシャルログインを簡単に実装できるのがFirebaseで提供されている Authenticationです。

Firebase Authentication は、バックエンド サービス、使いやすい SDK、アプリでのユーザー認証に使用できる UI ライブラリが用意されています。
パスワード、電話番号、一般的なフェデレーション ID プロバイダ(GoogleFacebookTwitter)などを使用した認証を行うことができます。

2.実装方法

2-1Firebaseでの作業

(1)Firebaseプロジェクトの作成する

①「プロジェクトを作成」を押下する

firebaseログイン後トップページ

②プロジェクト名を入力する
プロジェクト名入力画面

③「続行」を押下する
googleアナリティクス同意画面

④「プロジェクトを作成」を押下する
googleアナリティクス構成画面
プロジェクトが作成されます
プロジェクト作成完了

(2)Authentication の設定

①「Authentication」を選択する
f:id:tecmemo_y:20201206160412p:plain:w300

②「Sing-in-method」タブにて、ログイン許可するプロバイダを選択する
f:id:tecmemo_y:20201206160557p:plain:w300

③「有効にする」に変更し、「保存」を押下する
f:id:tecmemo_y:20201206160631p:plain:w300

Googoleが有効になります
f:id:tecmemo_y:20201206160715p:plain:w300

(3)ウェブ設定の確認

①「プロジェクトを設定」を選択する
f:id:tecmemo_y:20201206160857p:plain:w300

②「プロジェクト名」「ウェブAPIキー」をメモ帳等に控える
f:id:tecmemo_y:20201206160925p:plain:w300
2-2Nuxtプロジェクトでの作業で使用します。

2-2Nuxtプロジェクトでの作業

(1)Nuxtプロジェクトの作成

以下コマンドにてプロジェクトを作成する

npm init nuxt-app <project-name>

npx, yarnでも作成可能です。詳細は以下参照
インストール - NuxtJS

(2)Firebase SDK の追加

①「cd」コマンドで上記プロジェクトに遷移する
②以下コマンドにてFirebase SDK をインストールする

npm install --save firebase

CDNでも追加可能です。詳細は以下参照
Add Firebase to your JavaScript project

(3)ログイン処理の実装

①firebaseをインポートする

import firebase from 'firebase'

②ログイン処理を入れたい箇所に以下コードを追加する

      const config = {
        // 2-1Firebaseでの作業-(3)ウェブ設定の確認の値 
         apiKey: 'ウェブAPIキー', 
         authDomain: '(プロジェクト名).firebaseapp.com',
       }

      firebase.initializeApp(config)

      const provider = new firebase.auth.GoogleAuthProvider()
      firebase
        .auth()
        .signInWithPopup(provider) // ポップアップでログイン画面を表示 ※1
        .then(function (result) {
        // 成功時の処理 ※2
        })
        .catch(function (error) {
           // エラー時の処理
        })

※1 signInWithPopup(provider)signInWithRedirect(provider)に変更することで
ログイン画面をリダイレクトに変更できます。

※2 resultで取得できる値については以下参照
UserInfo  |  Identity Platform のドキュメント  |  Google Cloud

(4)ログアウト処理の実装

ログアウト処理を入れたい箇所に以下コードを追加する

      firebase
        .auth()
        .signOut()
        .then(function () {
          // 成功時の処理
        })
        .catch(function (error) {
          // エラー時の処理
        })
(5)ログイン状態確認処理の実装

ログイン状態確認処理を入れたい箇所に以下コードを追加する

    firebase.auth().onAuthStateChanged(function (user) {
      if (user) {
        // ログイン中
      }
(6)ログイン・ログアウト・状態確認の実装例
<template>
  <div>
    <section class="container">
      <h1>{{ title }}</h1>
      <button v-if="!isLogin" @click="onClickLogin">Login</button>
      <button v-if="isLogin" @click="onClickLogout">Logout</button>
      <table v-if="isLogin">
        <tr>
          <th>Name</th>
          <td>{{ name }}</td>
        </tr>
        <tr>
          <th>Email</th>
          <td>{{ email }}</td>
        </tr>
      </table>
    </section>
  </div>
</template>

<script>
import firebase from 'firebase'

export default {
  data() {
    return {
      title: 'Firebase Auth Sample',
      name: '',
      email: '',
      isLogin: false,
      config: {
         apiKey: 'ウェブAPIキー', 
         authDomain: '(プロジェクト名).firebaseapp.com',
      },
    }
  },
  created() {
    firebase.initializeApp(this.config)
    const self = this
    firebase.auth().onAuthStateChanged(function (user) {
      if (user) {
        self.isLogin = true
        self.email = user.email
        self.name = user.displayName
      }
    })
  },
  methods: {
    onClickLogin() {
      const provider = new firebase.auth.GoogleAuthProvider()
      const self = this
      firebase
        .auth()
        .signInWithPopup(provider)
        .then(function (result) {
          self.isLogin = true
          self.email = result.user.email
          self.name = result.user.displayName
        })
    },
    onClickLogout() {
      if (!confirm('ログアウトしますか?')) {
        return
      }
      const self = this
      firebase
        .auth()
        .signOut()
        .then(function () {
          self.isLogin = false
        })
        .catch(function (error) {
          console.log(error)
        })
    },
  },
}
</script>  

今回は1ファイルでまとめていますが、状態管理はVuexで管理した方が初期表示がきれいになると思います。

参考サイト

Authenticate Using Google Sign-In with JavaScript  |  Firebase

Vue.js&Nuxt.js超入門

Vue.js&Nuxt.js超入門

【Firebase】Hostingにデプロイする方法

FirebaseのHostingにデプロイする方法を紹介します。

1.事前準備

(1)Firebaseにログイン

①firebaseにアクセスする
firebase.google.com

②「使ってみる」を押下する
firebaseトップページ

googleアカウントでログインする
googleログイン画面
Firebaseにログイン完了です
firebaseログイン後トップページ

(2)Firebaseにプロジェクトを作成

①「プロジェクトを作成」を押下する

firebaseログイン後トップページ

②プロジェクト名を入力する
プロジェクト名入力画面

③「続行」を押下する
googleアナリティクス同意画面

④「プロジェクトを作成」を押下する
googleアナリティクス構成画面
プロジェクトが作成されます
プロジェクト作成完了

2.Firebase Hostingにデプロイする

(1)Firebase CLI*1 をインストールする

 npm から Firebase CLI をインストールするには、次のコマンドを実行します。

 npm install -g firebase-tools

 ※Node.js v8.0.0 以降が必要です

(2)Firebase CLI にログインする

ログインするには、次のコマンドを実行します。

firebase login

成功すると以下の表示になります。

firebase login
Already logged in as XXXXXXXX(ログインしたアカウント)@gmail.com

(3)Firebase プロジェクトを初期化する

プロジェクトを初期化するには、アプリのディレクトリ内から次のコマンドを実行します。

firebase init

(4)公開ルート ディレクトリを指定する

firebase.json の以下を修正する

  "hosting": {
    "public": "public",  ⇒ "(公開したいディレクトリ)"

(5)サイトにデプロイする

ローカル プロジェクト ディレクトリのルートから次のコマンドを実行します。

firebase deploy  

デプロイに成功すると以下の内容が表示されます。

+  Deploy complete!

Project Console: https://console.firebase.google.com/project/XXXX(プロジェクト名)/overview
Hosting URL: https://XXXX(プロジェクト名).web.app

Hosting URLにアクセスすると公開された内容を確認できます。

参考サイト

Firebase Hosting を使ってみる

firebasehostingを使いnuxt SPAをデプロイするまで(firebase-toolsフルセット)。 - Qiita

*1:Firebase プロジェクトの管理、表示、デプロイを行うさまざまなツールを提供します

【JavaScript】for..in,for...ofの違いについて

配列のループ処理に使用する、for..in,for...ofの違いについて調べてみました。

1.for..in,for...ofの違い

何を対象にループ処理を行っているかに違いがあります。

for..in for..of
ループ対象 列挙可能なプロパティ 反復可能なオブジェクトの値

※for...inは現在はあまり使用しません。 詳細は「4.まとめ」参照

2.for..inについて

for..inとは

オブジェクトのすべての列挙可能なプロパティに対して、順序不定で繰り返し処理を行います。

■Array でのループ処理

for (let v in [1,2,3]) console.log(v);  // => 0,1,2 (インデックスで反復:非推奨)

■Stringでのループ処理

for (const v in "abc") console.log(v);  // => 0,1,2 (インデックスで反復:非推奨)

連想配列(Object)でのループ処理

for (let v in {a:1,b:2}) console.log(v);  // => a,b (プロパティで反復)

連想配列(Map)でのループ処理

var m = new Map([['a',1],['b',2]]);
for (let v in m) console.log(v);  // => 0回の反復 (列挙可能なプロパティはない)

■Setでのループ処理

var s = new Set([1,2,3]);
for (let v in s) console.log(v);  // => 0回の反復 (列挙可能なプロパティはない)

for..inの注意点

注意1:実行順を指定できない

for...in ループは、任意の順序でオブジェクトのプロパティに対して反復します (なぜ繰り返しの見かけの順序に依存できないのかについては、詳細は delete オペレーターを参照)。
実行順を指定する場合は、数値のインデックスでの for ループ (か Array.prototype.forEach() か for...of ループ) を使いましょう。

注意2:継承したプロパティもループ対象となってしまう

「Object」や「Array」に設定したカスタムプロパティも、
ループ処理の対象となってしまいます。

Object.prototype.objCustom = function () {}; // 全てのオブジェクトに継承される
Array.prototype.arrCustom = function () {}; // 全てのArrayオブジェクトに継承される

const fruits = ["リンゴ", "ミカン", "バナナ"];
for (const key in fruits) {
  console.log(key); 
}
// ■ 結果
// 0
// 1
// 2
// arrCustom
// objCustom

継承したプロパティは「hasOwnProperty()」で除外できます。

for (const key in fruits) {
  if (fruits.hasOwnProperty(key)) { // 自身のプロパティのみ処理
    console.log(key); 
  }
}
// ■ 結果
// 0
// 1
// 2

3.for..ofについて

for..ofとは

反復可能なオブジェクトが定義した順序を反復処理します。

■Array でのループ処理

for (let v of [1,2,3]) console.log(v);  // => 1,2,3 (値で反復)

■Stringでのループ処理

for (let v of "abc") console.log(v);  // => a,b,c (文字で反復)

連想配列(Object)でのループ処理

for (let v of {a:1,b:2}) console.log(v);  // エラー  iterable でない

連想配列(Map)でのループ処理

var m = new Map([['a',1],['b',2]]);
for (let v of m) console.log(v);  // => [a,1],[b,2] (キーと値の配列で反復)

■Setでのループ処理

var s = new Set([1,2,3]);
for (let v of s) console.log(v);  // => 1,2,3 (要素で反復)

4.まとめ

for...inは、ECMAScript2015でMap(連想配列)が追加される以前、Objectを連想配列として使用していた時のコードとの互換性のために残っている機能のため、現在はあまり使用しません。
配列の操作は、for...of (あるいは forEach, map, reduce, some, every, find, find_index, filter メソッド)を使用しましょう。


※余談
for文内の変数宣言「for (const key in fruits)」が、letではなくconstでよいという点については関数のスコープが関係しています。
let と const について >> ループと反復処理 · Issue #567 · asciidwango/js-primer · GitHub

参考リンク

【備忘録】配列におけるfor in と for of の違い - Qiita

for...in - JavaScript | MDN

for...of - JavaScript | MDN

【Firebase/axios】データベースの作成・接続方法(本当に爆速!!!)

Firebaseデータベースを作成し、axiosで接続する方法をご紹介します。

1.Firebaseとは

Firebaseとは

GoogleにのモバイルおよびWebアプリケーション開発プラットフォームです。
2018年10月現在、Firebaseプラットフォームには18の製品があり、150万のアプリで使用されています。(Wiki)
今回は「Firebase Realtime Database」の作成・接続方法をご紹介します。

Firebase Realtime Databaseとは

クラウドホスト型データベースです。データは JSON として保存され、接続されているすべてのクライアントとリアルタイムで同期されます。
専用ソフト等をインストールする必要なく、googleアカウントとネット環境さえあれば使用できます。

2.axiosとは

axiosとは

axiosは、HTTP通信を簡単に行うことができるJavascriptライブラリです。

3.Firebase(データベース)の作成方法

(1)Firebaseにログイン

①firebaseにアクセスする
firebase.google.com

②「使ってみる」を押下する
firebaseトップページ

googleアカウントでログインする
googleログイン画面
Firebaseにログイン完了です
firebaseログイン後トップページ

(2)プロジェクトを作成

①「プロジェクトを作成」を押下する

firebaseログイン後トップページ

②プロジェクト名を入力する
プロジェクト名入力画面

③「続行」を押下する
googleアナリティクス同意画面

④「プロジェクトを作成」を押下する
googleアナリティクス構成画面
プロジェクトが作成されます
プロジェクト作成完了

(3)データベースを作成

①「データベースの作成」を押下する
データベースの作成開始画面

②「テストモードで開始」を選択する
セキュリティ保護ルール設定画面
※テストモードを選択することで、すべてのユーザーにデータへのアクセスを許可します。

基本的なセキュリティ ルール  |  Firebase

③「完了」を押下する
データベース作成完了画面
データベースが作成されます。
データベーストップ画面

(4)データを作成

①「Realtime Database」を選択する
RealtimeDatabaseに変更

②「+」を選択し、データ名を入力する
データ追加画面
データ追加画面

③データを追加する
データ追加画面2
※上記画面では「fruits」データに「apple」「banana」「grape」データを追加しています。

データが追加されます。
データ追加完了画面

4.Firebase(データベース)への接続方法

axiosライブラリを使用し、データベースにアクセスします。

※データベースのルールを変更する

データ取得・更新には以下のルール変更が必要になります。
設定を「".read": true」「".write": true」に変更します。
データベースルール設定画面

※axiosライブラリをインストールする

ライブラリは以下のコマンドでインストールできます。

npm install --save axios

(1)データを取得する

全データを取得する
const axios = require('axios'); // ライブラリインポート
const url = 'http://プロジェクト名.firebaseio.com/fruits.json';
const result = await axios.get( url );

GET送信はURL直アクセスでも取得できます。 データ取得結果

特定データを取得する
const url = 'http://プロジェクト名.firebaseio.com/fruits/キー.json'; //取得したいデータのキーを指定
const result = await axios.get( url );

(2)データを追加・更新する

const url = 'http://プロジェクト名.firebaseio.com/fruits/キー.json';
const result = await axios.put( url, 登録データ );

※指定したキーが存在しない場合は追加、存在する場合は更新になります。

(3)データを削除する

const url = 'http://プロジェクト名.firebaseio.com/fruits/キー.json';
const result = await axios.delete( url );

参考

Vue.js&Nuxt.js超入門

Vue.js&Nuxt.js超入門

【基本情報技術者試験】午後試験の勉強法

基本情報技術者試験の午後試験の勉強法をご紹介します。 午前試験については、こちらの記事を参照ください tecmemo-y.hatenablog.com

1. 学習の流れ

 ①2、3回分の過去問を解く
 ②勉強する項目を絞り込む
 ③絞り込んだ問題の過去問を繰り返し解く

①2、3回分の過去問を解く

午前に比べて午後は難易度が高くなります。 効率的に勉強するため、最初に何回か過去問を解いて得意・不得意を把握します。 把握するため、問2~7の選択問題も全部解いてみましょう。

■使用したテキスト

②勉強する項目を絞り込む

※注意 2020年4月より出題範囲と配点が変更になります。この記事は変更前の内容ですのでご注意ください。

基本情報技術者試験の試験改正について 2020年から大幅な変更へ | 初心者も未経験者も。基本情報技術者試験 ~合格への道~

■過去の出題

f:id:tecmemo_y:20191229183846j:plain
午後問題_過去の出題

問1情報セキュリティ、問8データ構造とアルゴリズム、問9~13ソフトウェア開発は毎回出題されています。
問2~7の選択問題もその期によって出題項目が変わっていますが、「データベース」「ネットワーク」「ソフトウェア設計」の3つは出題され続けているため、必須問題としてカウントしてしまってよいと思います。
勉強する項目を、自分の得意でかつ必須問題に絞り込みましょう。

③絞り込んだ問題の過去問を繰り返し解く

あとは過去問・問題集をひたすら解きましょう。

■使用したテキスト

 〇いいところ
  ・問題がコンパクトにまとめられているため過去問より時間短縮できる
  ・本のサイズが小さいので持ち運びしやすい

 ×わるいところ
  ・内容がほぼ過去問と一緒

改訂3版 基本情報技術者 らくらく突破 Java

改訂3版 基本情報技術者 らくらく突破 Java


 〇いいところ
  ・Javaの基本について丁寧に説明されている

 ×わるいところ
  ・試験対策というよりは、ほぼJavaについての本になっている

2. 勉強時のポイント

ポイント1:YouTube等の動画解説を利用する

文章での解説で中々理解できないところは、動画解説だと理解できる場合があるのでおすすめです。 「基本情報 午後」とかで検索すると結構ヒットします。

特にわかりやすかったのが以下の動画です。


平成28年春 基本情報技術者 午後 問8【アルゴリズム】解説

ポイント2:午前免除試験を受ける

試験当日は、午前試験2時間半を受けた後に午後試験に臨むことになります。
午前は問題数が多いため、疲れが午後試験に影響する場合があります。
また範囲は同じですが出題方法が違う午前と午後の勉強を並行するのも難しいかと思います。
そんな時は午前免除試験をお勧めします。

■メリット:
 ・午前、午後それぞれの試験勉強に専念できる
■デメリット:
 ・(2~3万円くらい)お金がかかる ※金額は通信教育の料金の目安です

IPA 独立行政法人 情報処理推進機構:情報処理技術者試験:午前試験免除 基本情報技術者試験(FE)