RxJavaとRetrofitでREST APIを叩く

REST APIクライアントのRetrofitとRxJava(RxKotlin)を組み合わせてGitHubのAPIを叩くという処理をいい感じにやっていきます。

Retrofitの導入

まずは諸々のライブラリを導入します。今回はスレッドの管理のためにRxAndroidも使います。また、JSONパーサとしてMoshiを使います。

dependencies {
    //Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
    implementation "com.squareup.retrofit2:converter-moshi:2.3.0"

    //RxKotlin
    implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'

    //RxAndroid
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
}

パーミッションを追加する

インターネットに接続しないといけないので、パーミッションを追加することを忘れないようにします。AndroidManifest.xmlに1行追加するだけの簡単なお仕事です。

<uses-permission android:name="android.permission.INTERNET"/>

データクラスを定義する

返ってくるJSONの形式に合わせてデータクラスを定義します。今回は以下のように定義しました。

data class User(
        val login: String,
        val id: Int,
        val avatar_url: String,
        val gravatar_id: String,
        val url: String,
        val html_url: String,
        val followers_url: String,
        val following_url: String,
        val gists_url: String,
        val starred_url: String,
        val subscriptions_url: String,
        val organizations_url: String,
        val repos_url: String,
        val events_url: String,
        val received_events_url: String,
        val type: String,
        val site_admin: Boolean,
        val name: String,
        val company: String,
        val blog: String,
        val location: String,
        val email: String,
        val hireable: Boolean,
        val bio: String,
        val public_repos: Int,
        val public_gists: Int,
        val followers: Int,
        val following: Int,
        val created_at: String,
        val updated_at: String
)

エンドポイントを定義する

インターフェースを作ってエンドポイントを定義します。アノテーションでいろいろできます。例えば今回はGetを使っていますがPostも使えます。ユーザー名は毎回指定したいので引数で渡しています。大事な点は、返り値としてObservableとしているところです。こうするとRxJavaのObservableで返してくれます。Userはさっき作ったデータクラスです。

interface GitHubClient {
    @GET("/users/{username}")
    fun getUser(@Path("username") username: String) : Observable
}

Retrofitのインスタンスを作る

ここまで準備ができたら、Retrofitのインスタンスをビルダーパターンで生成します。まずはbaseUrl()でベースURLを指定。今回はaddConverterFactory()でMoshiを使うように指定しています。GsonとかJacksonとかを使うときはよしなに…。次に、addCallAdapterFactoryでRxJavaを使うように指定します。ここまでできたらbuild()でインスタンスを作ります。

val retrofit = Retrofit.Builder()
        .baseUrl("https://api.github.com")
        .addConverterFactory(MoshiConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build()

APIを叩く

作ったRetrofitのインスタンスを使って、GitHubのAPIを叩きます。Androidはメインスレッドで通信処理を書けないので、subscribeOn(Schedulers.newThread())で通信処理を別スレッドで行うように指定しています。その後、RxAndroidのobserveOn(AndroidSchedulers.mainThread())でメインスレッドに処理を戻した後にsubscribeしています。subscribeすると、Observableとして指定したUserのインスタンスが流れてくるので、適当に処理をすればOKです。

retrofit.create(GitHubClient::class.java)
        .getUser("okuzawats")
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({user -> run {
            Log.d(tag, user.login)
            Log.d(tag, user.location)
            Log.d(tag, user.bio)
        }})

以上でRxJavaとRetrofitを使ったREST APIを叩くことができました。

茨城県つくば市在住のイケてるメンズです。東京工業大学卒業後、コンサルタントを経て、2016年よりモバイルアプリ(主にAndroid)のエンジニアとして働いています。2017年UI DesignコンテストAndroid部門特別賞受賞。

ご連絡はメールフォームからお願いします。

Logを使っていたらTimberを使えって警告が出たのでログ出力にはTimberを使おう

Android Studio 3.0.1でLogを使ってログ出力していたら「Timberを使え」って警告が出てきました。

Timberって何?という方のために、Timberの使い方を簡単にまとめておきます。Kotlinを使います。

Timber is 何?

Timberは、Androidで使えるOSSのライブラリです。主にログ出力を担当してくれます。「神」ことJake Wharton氏が主に開発に携わっています。

何が便利かというと、デバッグの時のみログを出力する、というような設定をしてあげることで、条件分岐を作ったり、ログ出力のコードを削ったりしなくても、デバッグの時のみログを出力してくれることです。

Timberの簡単な使い方

Timberの導入

Timberをプロジェクトに導入するには、Module: appのbuild.gradleのdependenciesにTimberを追加します。Android Studio 2系の場合はimplementationではなくcompileでしょうか。

dependencies {
    implementation 'com.jakewharton.timber:timber:4.6.0'
}

ApplicationクラスでTimberを初期化

次にApplicationクラスの子クラスを作って、Android Manifestファイルのapplicatioinに追加します。これを忘れると初期化処理が呼ばれないので忘れないようにします。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.rocketapps.timber">

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

onCreateの中で、Timberを「植えて」あげれば準備は完了(「timber」とは木材の意味。洒落てますね)。BuildConfig.Debugの時のみ植えることで、デバッグの時のみログ出力することができます。

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree())
        }
    }
}

Timberを使う

準備が整いました。早速Timberを使ってみます。Log.dに相当するものは、TimberではTimber.dです。タグは指定しなくても、「MainActivity」というようにクラス名でタグ付けしてくれます。

Timber.d("Hello Timber!")

tag()を使うことで、自分でタグ付けすることもできます。

Timber.tag("TAG").d("tag")

たったこれだけで、デバッグ時にのみログを出力してくれるようになります。Timber、便利ですね。

茨城県つくば市在住のイケてるメンズです。東京工業大学卒業後、コンサルタントを経て、2016年よりモバイルアプリ(主にAndroid)のエンジニアとして働いています。2017年UI DesignコンテストAndroid部門特別賞受賞。

ご連絡はメールフォームからお願いします。

RxJava + Androidの世界に入門する

RxJavaに入門するためのあれこれを書いておきます。

RxJavaの導入

まずはプロジェクトにRxJavaを導入します。

Module: appのbuild.gradleを開き、dependenciesにRxJavaを追加します。Android Studio 2系の場合はimplementationではなくcompileでしょうか。

dependencies {
    //RxJava
    implementation 'io.reactivex.rxjava2:rxjava:2.1.9'
}

また、Java8から導入されたラムダ式を使いたいので、Java8を有効にします。

android {
    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
}

Android Studio 3系はラムダ式をサポートしているようですが、Android Studio 2系はラムダ式をサポートしていません。Android Studio 2系の場合はラムダ式をバックポートしてくれる「Retrolambda」というライブラリを使います。Retrolambdaの導入については以下の記事を参考にしてください。

AndroidのプロジェクトにRetrolambdaを導入する – Androidアプリ開発@つくば

Hello RxJava

まずはRxJavaを使ってHello World的なことを行ってみましょう。今回は適当にonCreateの中に書きます。まずはObservableを作って、subscribeします。Observableは、java.utilのものとio.reactivexのものがあるので、io.reactivexの方を使います。最初だけ、コードのほぼ全文を示しておきます。実行してみましょう。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import io.reactivex.Observable;

public class MainActivity extends AppCompatActivity {

    private final String TAG = getClass().getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Observable.just("Hello, RxJava!")
                .subscribe(string -> Log.d(TAG, string));
    }
}

「Hello, RxJava!」とLogcatに表示されたでしょうか?

Observableを作って、subscribeする。これがRxJavaの基本形になります。just()はObservableを作るメソッドの一つで、引数にとったオブジェクトが流れていきます。もっと多くのものを流してみましょう。

Observable.just(0, 1, 2, 3, 4)
        .subscribe(i -> Log.d(TAG, String.valueOf(i)));

0、1、2、3、4のintが流れていきます。intが流れているので、String.valueOf()でString型に変換しています。just()は、10個までの引数をとり、それを流してくれるオペレーターです。引数の型は問いません。例えば以下のコードも問題なく動作します。

Observable.just(0, 'a', 1, 'b', 2, "Hello!")
        .subscribe(__ -> {
            //do something here
        });

10個以上の要素を流したい時はどうしたらいいでしょうか?Observable.fromArray()やObservable.fromIterable()を使いましょう。

List list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
    list.add(i);
}
Observable.fromIterable(list)
        .subscribe(i -> Log.d(TAG, String.valueOf(i)));

これで0〜19までの数字が流れていきます。ところで、上記のコードは少し残念な感じです。せっかくRxJavaを使っているのに、for文を使っています。上記のコードはrange()を使って置き換えることができます。

Observable.range(0, 19)
        .subscribe(i -> Log.d(TAG, String.valueOf(i)));

この流れの中から、偶数の数字のみを取り出してみます。filter()を使いましょう。

Observable.range(0, 19)
        .filter(i -> i % 2 == 0)
        .subscribe(i -> Log.d(TAG, String.valueOf(i)));

filter()は、ラムダ式の返り値がtrueとなるもののみ通します。文字通りフィルターしてくれるオペレータです。使用頻度が高いです。

次にフィルターした値を10倍にして流してみます。map()を使います。

Observable.range(0, 19)
        .filter(i -> i % 2 == 0)
        .map(i -> i * 10)
        .subscribe(i -> Log.d(TAG, String.valueOf(i)));

map()は変換を司っています。同じ型の値を流す必要さえありません。さらにint型をString型に変換して流してみましょう。

Observable.range(0, 19)
        .filter(i -> i % 2 == 0)
        .map(i -> i * 10)
        .map(i -> String.valueOf(i))
        .subscribe(s -> Log.d(TAG, s));

このように、オペレータはいくつでも好きなように繋げることができます。RxJavaでは、オペレータを組み合わせることによって様々なことを簡潔なコードで実現することができます。

ところで、上記のコードは「メソッド参照」によってもう少し簡潔に書くことができます。やってみましょう。

Observable.range(0, 19)
        .filter(i -> i % 2 == 0)
        .map(i -> i * 10)
        .map(String::valueOf)
        .subscribe(s -> Log.d(TAG, s));

長くなってきたので、この記事は一度この辺で終わりにします。Observableを作って、subscribeする。流れを作る。オペレータで流れを変える。この感覚が、少しでも伝わったら良いのですが。

本文書は、筆者の理解が深まるとともに加筆・修正していこうと思います。突っ込みがあれば、コメント欄またはツイッターまで。お手柔らかによろしくお願いします。

茨城県つくば市在住のイケてるメンズです。東京工業大学卒業後、コンサルタントを経て、2016年よりモバイルアプリ(主にAndroid)のエンジニアとして働いています。2017年UI DesignコンテストAndroid部門特別賞受賞。

ご連絡はメールフォームからお願いします。

AndroidのプロジェクトにRetrolambdaを導入する

AndroidのプロジェクトにRetrolambdaを導入する手順を毎回忘れているので記録しておきます。

始めに、プロジェクトのbuild.gradleに1行追加します。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        //retrolambda
        classpath 'me.tatarka:gradle-retrolambda:3.7.0' //追加
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

次に、アプリのbuild.gradleに2箇所追加します。

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //追加

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    //追加
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

ラムダ式に置き換えたい場所に「Replace with lambda」が出てきてラムダ式に変換できれば、Retrolambdaの導入は成功です。

茨城県つくば市在住のイケてるメンズです。東京工業大学卒業後、コンサルタントを経て、2016年よりモバイルアプリ(主にAndroid)のエンジニアとして働いています。2017年UI DesignコンテストAndroid部門特別賞受賞。

ご連絡はメールフォームからお願いします。

ストレングス・ファインダーの結果が出てきた

10年くらい前にやったストレングス・ファインダーの結果が出てきたので貼っておきます。

最上志向

優秀であること、平均ではなく。これがあなたの基準です。平均以下の何かを平均より少し上に引き上げるには大変な努力を要し、あなたはそこに全く意味を見出しません。平均以上の何かを最高のものに高めるのも、同じように多大な努力を必要としますが、はるかに胸躍ります。自分自身のものか他の人のものかに関わらず、強みはあなたを魅了します。真珠を追い求めるダイバーのように、あなたは強みを示す明らかな徴候を探し求めます。生まれついての優秀さ、飲み込みの速さ、一気に上達した技能――これらがわずかでも見えることは、強みがあるかもしれないことを示す手がかりになります。そして一旦強みを発見すると、あなたはそれを伸ばし、磨きをかけ、優秀さへ高めずにはいられません。あなたは真珠を光り輝くまで磨くのです。このように、この自然に長所を見分ける力は、他の人から人を区別していると見られるかもしれません。あなたはあなたの強みを高く評価してくれる人たちと一緒に過ごすことを選びます。同じように、自分の強みを発見しそれを伸ばしてきたと思われる人たちに惹かれます。あなたは、あなたを型にはめて、弱点を克服させようとする人々を避ける傾向があります。あなたは自分の弱みを嘆きながら人生を送りたくありません。それよりも、持って生まれた天賦の才能を最大限に利用したいと考えます。その方が楽しく、実りも多いのです。そして意外なことに、その方がもっと大変なのです。

<最上志向>を強みとする人の活かし方

  • この人は仕事で最高の成果を収めることと、そのための手段を考えることに何より興味を持っている。反対に、失敗に終わったことをもう一度立て直すことには、あまり意欲を示さない。
  • だから、問題処理に終始する役割に就かせるのは考えものだ。
  • この人があなたに求めているのは、強みを認め、その強みを高く評価してもらうことだ。弱点を指摘し、矯正するよう指導してばかりいると、不満をつのらせるだけだろう。
  • この人の強みについてはことこまかに、その強みを企業の利益につなげるにはどの部署で、どういった業務にあたればいいか、本人とよく話し合うことだ。この人はそうした話し合いを好み、自らの強みを最大限に活かそうと、実用的な提案を次々と出してくるだろう。
  • できるかぎりキャリアパスを用意し、それぞれの段階に応じた報酬が得られるよう気を配る。そうすれば、この人は成長しつづけ、与えられた職務ですぐれた成果を収めるだろう。この人は自らの強みが活かされる道を無条件に選ぶ。収入は増えても強みが活かされない道を選ぶことはまずない。
  • 企業内における最もすぐれた業績を調査するときには、プロジェクトチームの中心に据えるといい。生まれながらに優秀さに対する探究心を持っているからだ。
  • 従業員一人ひとりの業績を評価し、それぞれに応じた賞与を与えるための査定プログラムが必要になったら、この人に任せるといい。各職務において優秀さとはどのように見えるものか、進んで考えてくれるだろう。

未来志向

「もし・・・だったら、どんなに素晴らしいだろうなぁ」と、あなたは水平線の向こうを目を細めて見つめることを愛するタイプの人です。未来はあなたを魅了します。まるで壁に投影された映像のように、あなたには未来に待ち受けているかもしれないものが細かいところまで見えます。この細かく描かれた情景は、あなたを明日という未来に引き寄せ続けます。この情景の具体的な内容――より品質の高い製品、より優れたチーム、より良い生活、あるいはより良い世界――は、あなたの他の資質や興味によって決まりますが、それはいつでもあなたを鼓舞するでしょう。あなたは、未来に何ができるかというビジョンが見え、それを心に抱き続ける夢想家です。現在があまりにも失望感をもたらし、周囲の人々があまりにも現実的であることが分かった時、あなたは未来のビジョンをたちまち目の前に呼び起こします。それがあなたにエネルギーを与えてくれます。それは、他の人にもエネルギーを与えます。事実、あなたが未来のビジョンを目に浮かぶように話すのを、人々はいつでも期待します。彼らは自分たちの視野を広げ、精神を高揚させることができる絵を求めています。あなたは彼らのためにその絵を描くことができます。描いてあげなさい。言葉を慎重に選びなさい。できる限りその絵を生き生きと描きなさい。人々はあなたが持ちこんで来る希望につかまりたくなるでしょう。

<未来志向>を強みとする人の活かし方

  • この人が出席する査定会議や業務会議では、この人には将来を前提に物事を考える傾向のあることを忘れてはいけない。むしろ、この人の考える将来の展望すなわち、あなたの企業や市場や分野全般に関する考えを聞き出すようにするといい。
  • 将来、必要になると思われる製品やサービスについて考え、書き出し、計画を立てる時間を与える。そして、社内報や会議や他企業との代表者会議でその見解を述べる機会もつくるようにする。
  • この人が興味を持ちそうなデータや記事を探し、それらを見せる。製粉所が穀物を必要とするように、この人に必要なのは未来展望の元になる原料だ。
  • 企業内の企画会議に参加させ、三年後、企業がどのようになっているか、データを元にした見解を発表させる。こういった発表の場は半年ごとくらいに設けるといい。そういう機会が与えられることで、この人自身、天性の洞察力と新しいデータで自らの見解をさらに発展させることができる。
  • この人の才能を活性化させるには、将来の可能性について話し合う機会を頻繁に持つことが一番だが、その際には、この人が思い描いている将来の展望ができるかぎり鮮明なものになるよう、多くの質問を投げかける。
  • 従業員に軌道修正を受け入れさせる必要があるときには、この人の手を借り、だれもが納得できる形で、軌道修正と企業の将来性との関連を明確にしてもらい、プレゼンテーションを行ってもらうか、社内報に書いてもらうかするといい。ほかの人たちが現在の不確実性に対して抱いている不安を克服するのに大いに役立ち、将来の可能性に関しては多くの人がこの人とほぼ同じ希望を持つようになるはずだ。

自我

あなたは、他人の目にとても重要な人間として映りたいのです。もっとはっきり言えば、あなたは認められたいのです。あなたは聴いて欲しいのです。あなたは目立ちたいのです。あなたは知られたいのです。具体的には、あなたの持ち前の強みによって人に知られ、評価されたいのです。あなたは、信頼でき、プロフェッショナルであり、そして成功している人として、尊敬されたいと感じています。同時に、あなたは信頼でき、プロフェッショナルで、成功している人とだけつきあいたいのです。もしそういう人でないと、あなたは彼らがそうなるまで圧力をかけるでしょう。彼らがそうならないなら、あなたは彼らを置いて先へ進むでしょう。独立心の強いあなたは、仕事を単なる仕事そのものではなく、自分の人生そのものにしたいと考えています。そしてその仕事の中で、好きなようにやらせて欲しい、又は自分のやり方でやるための余地を与えて欲しいのです。あなたのこのことに対する熱い思いは非常に強く、あなたはこれらを実現しようとします。ですからあなたの生活は、強く求める目標、成果、地位であふれています。何に焦点を当てていようとも――一人によって異なりますが――あなたの「自我」という資質は、中途半端から優秀な状態へとあなたを向上させ続けます。これが、あなたをより向上させ続けている資質なのです。

<自我>を強みとする人の活かし方

  • この人は独立心がすこぶる強い。だから、干渉しすぎは禁物である。
  • この人にとっては自分の業績や貢献を認めてもらうことが何より重要である。だから、できるかぎり裁量の余地を与えるといい。そして、その経過を黙って見守り、あらゆる段階で賞賛のことばを惜しまないようにするといい。
  • この人は、目立つこと、認められることが大好きな人だ。注目の的になり、プレッシャーをかけられるのが愉しいのである。だから、だれもが納得する形で、注目される立場に据えるといい。そうすることで、この人が自分からそういう立場に立とうととして、まわりと不協和音を奏でることが防げる。
  • この人には、信頼でき、生産力があり、専門職に就いている人たちと関わる仕事が向いている。最も優秀な人たちとともに働ける環境。それがこの人の望みだ。
  • グループ内でだれかほかの人が見事な業績を上げたときには、その貢献を積極的に賞賛するよう促すといい。この人はほかの人をいい気分にさせることを愉しむ気質も備えている。
  • 達成欲に燃えているときには(この人が燃えないはずがない)目標達成のために発展させなければならない強みは何か、明確に伝えるといい。その際、目標を下げるようには絶対に言わないこと。強みを発展させる段階に準じる、なんらかの基準を持たせるようにするといい。
  • この人には人から認められることが何にも勝るほうびとなる。だから、相応に認められないと、自尊心がひどく傷つけられたと思う。そんなときには、改めて意識を自らの強みに向けさせ、その強みを活かせる新たな目標を定めるよう助言する。目標のあることそれ自体がエネルギーの源泉となるのである。

自己確信

自己確信は自信と共通する点があります。心の奥深くで、あなたは自分の強みを強く確信しています。あなたは自分は絶対出来る――リスクを取ることができ、新しい挑戦をすることができ、そして最も重要なこととして成果を出すことができる――ことを確信しています。ただし、自己確信は単なる自信を越えるものです。自己確信という資質に恵まれたことで、あなたは自分の能力だけでなく判断力にも自信を持っています。自分の周りを見た時、あなたは自分の見方が独自かつ独特であると強く思います。そして、あなたと全く同じ見方をしている人は誰もいないので、あなたに関する事について決定を下せる人はあなたしかいないと絶対に信じています。何を考えるべきかは、誰もあなたに指示できません。彼らはヒントを与えることはできるでしょう。助言することもできるでしょう。しかし、あなただけが、結論を出し、何をするかを決定し、行動する権限を持っています。この権限、更にはあなたの人生に関する最終的な責任を取ることを、あなたは決して怖がりません。むしろ、あなたには当たり前に感じられるのです。状況の如何に関わらず、あなたは何が正しい決断であるかをいつも知っているようです。この資質は、あなたに確信に満ちた貫禄を与えます。他の人と異なり、いくら説得力があっても、あなたは他の人の主張に安易に左右されることはありません。この自己確信という資質は、あなたの他の資質の持ち方によって、表面に現れたり現れなかったりしますが、その資質は強くしっかりとあります。船の竜骨のように、それは方々からの攻撃に耐えて、あなたが進路からはずれないようにします。

<自己確信>を強みとする人の活かし方

  • 重要な決定を下す権限のある職務に就かせる。この人は他人からの指示を望んでもいなければ、必要ともしていない。
  • この人にとって、成功への鍵は不屈の精神である。自らが決めた道に確信を持っているため、方向を変えるよう圧力がかかったとしても、決して意思を曲げない。だから、この資質が活かされる役割を与えなければならない。
  • 終始一貫した態度がこの人の強みだ。重大な局面で、内面からにじみ出る威厳は、同僚や顧客に安心感を与えるだろう。
  • 自分は行動派というこの人の自己像を支持し、「きみに任せる。うまくやってくれ」にしろ、「直感でどう思うか言ってくれ。私はきみの直感を信じている」にしろ、そういった言葉をかけて励ます。
  • この人の決定や行動が生産力の向上に直接つながっていたら、そのことをちゃんと本人に伝える。特にすぐれた成果を収めた業務を取り上げ、話をするといい。成果や結果に多大な影響を与えていることが確信できると、さらに実力を発揮する。
  • この人には真の強みが活かせないおそれのある分野でも、何かできると思い込んでいる節がある。分野に関係なく、<自己確信>がいい結果をもたらすこともないわけではないが、自己主張が過ぎたり、判断を大きく誤ったときには、即座に指摘するといい。この人は根本的な修正を行おうとする人で、的確なフィードバックを望んでいる。
  • <自己確信>以外のきわだった資質にも眼を向けること。<未来志向><目標志向><自我><アレンジ>。このうちいずれかの資質も兼ね備えているようなら、いずれ指導的立場に立つ潜在能力を秘めていると判断していい。

学習欲

あなたは学ぶことが大好きです。あなたが最も関心を持つテーマは、あなたの他の資質や経験によって決まりますが、それが何であれ、あなたはいつも学ぶ「プロセス」に心を惹かれます。内容や結果よりもプロセスこそが、あなたにとっては刺激的なのです。あなたは何も知らない状態から能力を備えた状態に、着実で計画的なプロセスを経て移行することで活気づけられます。最初にいくつかの事実に接することでぞくぞくし、早い段階で学んだことを復誦し練習する努力をし、スキルを習得するにつれ自信が強まる――これがあなたの心を惹きつける学習プロセスです。あなたの意欲の高まりは、あなたに社会人学習――外国語、ヨガ、大学院など――への参加を促すようになります。それは、短期プロジェクトへの取組みを依頼されて、短期間で沢山の新しいことを学ぶことが求められ、そしてすぐにまた次の新しいプロジェクトへに取組んでいく必要のあるような、活気に溢れた職場環境の中で力を発揮します。この「学習欲」という資質は、必ずしもあなたがその分野の専門家になろうとしているとか、専門的あるいは学術的な資格に伴う尊敬の念を求めていることを意味するわけではありません。学習の成果は、「学習のプロセス」ほど重要ではないのです。

<学習欲>を強みとする人の活かし方

  • 状況が刻々と変化する分野で、その変化に即応しなければならない職務を任せる。そうした変化を自分の能力に対する挑戦と見て、意欲を燃やすタイプだ。
  • この人は、そうする義務があろうとなかろうと、新たな事実や技術や知識を貪欲に身につけようとする。だから、学習により適した環境を求めて、あなたの企業を離れていかないように、この人が自由に学習できて、モチベーションを維持できる方法をあれこれ考えるといい。仕事を通して学習できる機会に欠けるようなら、この人の関心が向かいそうな地元の大学や教育機関の講座に通わせるのも一案だ。ただし、この人は必ずしも昇進を望んでいるわけではないということを忘れないように。この人にとっては学習することそれ自体に意義があるのだ。学習の成果ではなく学習のプロセスそのものがこの人を活性化させるのである。
  • 学習の進捗状況を見守り、そのつど到達したレベルを明確にする。そして、その進歩に対しては賞賛のことばをかける。
  • 「販売の第一人者」や「部内の専門家」になることを促し、そのための講座を受けられるよう手筈も整える。そして、各段階で目指すレベルに到達すれば、そこまでの過程を認める。証明書やメダルを与えるのもこの人にはその後の励みになるだろう。
  • 同じ分野の第一人者のそばで仕事をさせ、学習欲が刺激される環境に置く。
  • 企業内の討論会やプレゼンテーションを取り仕切るよう促す。人に教えることほど自らが学習できる機会もないからだ。
  • 企業外で教育を受けつづけられるよう経済的にも援助する。

茨城県つくば市在住のイケてるメンズです。東京工業大学卒業後、コンサルタントを経て、2016年よりモバイルアプリ(主にAndroid)のエンジニアとして働いています。2017年UI DesignコンテストAndroid部門特別賞受賞。

ご連絡はメールフォームからお願いします。