first() don't seem to work while using an image transform
This is where it goes wrong:

{% for asset in image %}


Because you use first(), you end up with an AssetFileModel, not an array of those.
If you than loop through that AssetFileModel with a for-loop, you get all the values of that Model. They don't have a method called getUrl(), which is what causes the error.

So, skip the for-loop and just use:

{% set image = entry.articleImages.first() %}
&lt;img src="{{ asset.url('worksList') }}" /&gt;


The url() method is an alias for getUrl().